測試 Helper

以下介紹 Helper 常見的測試標的。

命名慣例

文件擺放位置:

spec/helpers/[helper_name]_spec.rb

譬如:

app/models/application_helper.rb 對應的測試文件為 spec/models/application_helper_spec.rb

app/helpers/user_helper.rb 對應的測試文件為 spec/helpers/user_helper_spec.rb

RSpec 提供的方法

RSpec 提供了一個 helper 的對象,所有 ApplicationHelper*Helper 定義的方法都可以在對象上調用。

比如

# app/helpers/application_helper.rb
module ApplicationHelper
  def render_system_status
    ...
  end
end

# app/helpers/user_helper.rb
module UserHelper
  def render_user_status(user)
    ...
  end
end

則在 RSpec Helper Spec 裡就可以用這些方法來測試:

expect(helper.render_system_status).to eq "..."
expect(helper.render_user_status(user)).to eq "..."

測試 Helper 裡面的每個公有方法

UserHelper 定義了 link_to_user

module UserHelper
  def link_to_user(user)
    link_to "#{user.first_name} #{user.last_name}", user
  end
end

對應的測試:

RSpec.describe UserHelper do
  describe "#link_to_user" do
    it "should return the user's full name" do
      user = create(:user, first_name: "David", middle_name: "Heinemeier", last_name: "Hansson")

      result = helper.link_to_user(user)

      expect(result).to eq %(<a href="/user/#{user.id}">David Heinemeier Hansson</a>)
    end
  end
end

延伸閱讀

RSpec 關於 Helper 的文件

官方關於 Helper 測試的文章:Testing Helpers

results matching ""

    No results matching ""