辅助方法规范

辅助方法规范用 `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` 时

示例应该全部通过。