辅助方法规范
辅助方法规范用 `type: :helper` 标记,或者如果您设置了 `config.infer_spec_type_from_file_location!`,则将它们放在 `spec/helpers` 中。
辅助方法规范公开一个 `helper` 对象,其中包括指定的辅助方法模块,`ApplicationHelper` 模块(如果有)以及 Rails 中内置的所有辅助方法。它不包括应用程序中的其他辅助方法模块。
要访问您指定的辅助方法,只需直接在 `helper` 对象上调用它们。
注意:控制器中定义的辅助方法不包括在内。
返回值的辅助方法
给定一个名为 “spec/helpers/applicationhelperspec.rb” 的文件,其中包含:
require "rails_helper"
RSpec.describe ApplicationHelper, type: :helper do
describe "#page_title" do
it "returns the default title" do
expect(helper.page_title).to eq("RSpec is your friend")
end
end
end
以及一个名为 “app/helpers/application_helper.rb” 的文件,其中包含:
module ApplicationHelper
def page_title
"RSpec is your friend"
end
end
当我运行 `rspec spec/helpers/application_helper_spec.rb` 时
则示例应该全部通过。
访问实例变量的辅助方法
给定一个名为 “spec/helpers/applicationhelperspec.rb” 的文件,其中包含:
require "rails_helper"
RSpec.describe ApplicationHelper, type: :helper do
describe "#page_title" do
it "returns the instance variable" do
assign(:title, "My Title")
expect(helper.page_title).to eql("My Title")
end
end
end
以及一个名为 “app/helpers/application_helper.rb” 的文件,其中包含:
module ApplicationHelper
def page_title
@title || nil
end
end
当我运行 `rspec spec/helpers/application_helper_spec.rb` 时
则示例应该全部通过。
Application helper 包含在 helper 对象中
给定一个名为 “spec/helpers/widgetshelperspec.rb” 的文件,其中包含:
require "rails_helper"
RSpec.describe WidgetsHelper, type: :helper do
describe "#widget_title" do
it "includes the app name" do
assign(:title, "This Widget")
expect(helper.widget_title).to eq("The App: This Widget")
end
end
end
以及一个名为 “app/helpers/application_helper.rb” 的文件,其中包含:
module ApplicationHelper
def app_name
"The App"
end
end
以及一个名为 “app/helpers/widgets_helper.rb” 的文件,其中包含:
module WidgetsHelper
def widget_title
"#{app_name}: #{@title}"
end
end
当我运行 `rspec spec/helpers/widgets_helper_spec.rb` 时
则示例应该全部通过。
URL 辅助方法已定义
给定一个名为 “spec/helpers/widgetshelperspec.rb” 的文件,其中包含:
require "rails_helper"
RSpec.describe WidgetsHelper, type: :helper do
describe "#link_to_widget" do
it "links to a widget using its name" do
widget = Widget.create!(:name => "This Widget")
expect(helper.link_to_widget(widget)).to include("This Widget")
expect(helper.link_to_widget(widget)).to include(widget_path(widget))
end
end
end
以及一个名为 “app/helpers/widgets_helper.rb” 的文件,其中包含:
module WidgetsHelper
def link_to_widget(widget)
link_to(widget.name, widget_path(widget))
end
end
当我运行 `rspec spec/helpers/widgets_helper_spec.rb` 时
则示例应该全部通过。