Ruby on rails 4 简单的自定义匹配器不起作用

Ruby on rails 4 简单的自定义匹配器不起作用,ruby-on-rails-4,rspec-rails,matcher,Ruby On Rails 4,Rspec Rails,Matcher,我为http响应编写了一个简单的匹配器: RSpec::Matchers.define :http_answer? do |answer| match do response.status == answer end end 但总是这样:好的 我在请求规范中使用了它。 我错在哪里? 是否可以正确地编写这样的匹配器?请阅读 有一个内置的have_http_status匹配器,用于匹配您正在尝试执行的操作 require "rails_helper" RSpec.describe

我为http响应编写了一个简单的匹配器:

RSpec::Matchers.define :http_answer? do |answer|
  match do
    response.status == answer
  end
end
但总是这样:好的 我在请求规范中使用了它。 我错在哪里? 是否可以正确地编写这样的匹配器?

请阅读

有一个内置的
have_http_status
匹配器,用于匹配您正在尝试执行的操作

require "rails_helper"

RSpec.describe ApplicationController, :type => :controller do

  controller do
    def index
      render :json => {}, :status => 209
    end
  end

  describe "GET #index" do
    it "returns a 209 custom status code" do
      get :index
      expect(response).to have_http_status(209)
    end
  end

end
如果出于某种原因,您仍然希望为控制器响应状态编写自己的匹配程序,请确保:

控制器规格由:type=>:Controller或如果您已设置 config.inference_spec_type_from_file_location!将它们放置在规格/控制器中。


…而且我所知道的
的优秀文档具有\u http\u状态
http\u asnwer?
是一个学习的例子。此外,我在请求/功能规范中使用了http状态,而不是控制器状态,并且它可以正常工作。我不明白的是-为什么全局变量(或非全局变量)
response
在我的匹配器中不可见。