我在控制器规范中使用自定义rspec匹配器,消息始终为空。
规范如下:
describe QuestionnaireController do
matcher :redirect_to_sign_in_if_not_authenticated do |method|
match do |controller|
self.send(method)
response.should redirect_to new_user_session_path
end
end
describe "GET index" do
it { should redirect_to_sign_in_if_not_authenticated(get :index) }
end
end
运行此测试时,它失败了,所有出现的都是:
Failures:
1) QuestionnaireController GET show
如您所见,此处缺少默认的消息。如何让它出现?
答案 0 :(得分:0)
您可以使用failure_message_for_should
块,如下所述:https://www.relishapp.com/rspec/rspec-expectations/v/2-4/docs/custom-matchers/define-matcher#overriding-the-failure-message-for-should
但是,你可能会遇到一些问题:
get :index
实际上会调用get
方法,然后将返回值传递给匹配器,而代码似乎没有预期。should redirect_to
),则回溯可能会搞砸。您可能需要考虑使用共享示例:https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples