測試 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。