0

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

如您所见,此处缺少默认的应该消息。我如何让它显示出来?

4

1 回答 1

0

您可以使用failure_message_for_should块,如下所述:https ://www.relishapp.com/rspec/rspec-expectations/v/2-4/docs/custom-matchers/define-matcher#overriding-the-failure-message-应该的

但是,您可能会在这里遇到一些问题:

  • get :index将实际调用该get方法,然后将返回值传递给匹配器,这似乎是代码所不期望的。
  • should redirect_to如果您在自定义匹配器中使用另一个匹配器 ( ),错误和回溯可能会被搞砸。

您可能想考虑一个共享示例:https ://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples

于 2013-03-29T15:13:51.830 回答