使用自定义rspec匹配器和示例组创建时,消息为空

时间:2013-02-23 18:57:09

标签: ruby-on-rails ruby rspec rspec-rails

我在控制器规范中使用自定义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 

如您所见,此处缺少默认的消息。如何让它出现?

1 个答案:

答案 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