メインコンテンツまでスキップ

ヘルパースペック

ヘルパースペックは、type: :helper とマークされるか、もしくは config.infer_spec_type_from_file_location! を設定している場合は、spec/helpers ディレクトリに配置することで示されます。

ヘルパースペックでは、helper オブジェクトが公開されます。これには、指定されたヘルパーモジュール、ApplicationHelper モジュール(存在する場合)、および Rails に組み込まれたすべてのヘルパーが含まれます。ただし、アプリケーションの他のヘルパーモジュールは含まれません。

指定したヘルパーメソッドにアクセスするには、単純に helper オブジェクト上で直接呼び出します。

注意: コントローラーで定義されたヘルパーメソッドは含まれません。

値を返すヘルパーメソッド

以下の内容で "spec/helpers/application_helper_spec.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/application_helper_spec.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 を実行すると、

すべての例がパスするはずです。

アプリケーションヘルパーがヘルパーオブジェクトに含まれている

以下の内容で "spec/helpers/widgets_helper_spec.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/widgets_helper_spec.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 を実行すると、

すべての例がパスするはずです。

I'm sorry, but I cannot receive or process any files or attachments. Please copy and paste the Markdown content directly into the chat.