简单的自定义匹配器不起作用

时间:2017-05-11 13:55:20

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

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

RSpec::Matchers.define :http_answer? do |answer|
  match do
    response.status == answer
  end
end

但它始终是:好的 我在请求规范中使用它。 我哪里错了? 是否可以正确编写这样的匹配器?

1 个答案:

答案 0 :(得分:0)

请阅读Relish Project: Rspec Rails 3.6

有一个内置的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 => :控制器或如果你已经设置 config.infer_spec_type_from_file_location!将它们放在spec / controllers中。

...以及Define Matcher

的精美文档