RSpec错误“未定义的方法`respond_with'...”

时间:2016-03-02 16:54:07

标签: ruby-on-rails ruby rspec

我正在关注教程http://apionrails.icalialabs.com/book/chapter_three 但是当我运行控制器测试bundle exec rspec spec/controllers时,我得到了未定义的方法错误:

Failures:

 Api::V1::UsersController GET #show 
 Failure/Error: it { should respond_with 200 }
 NoMethodError:
   undefined method `respond_with' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x00000005d6f650>
 # ./spec/controllers/api/v1/users_controller_spec.rb:17:in `block (3 levels) in <top (required)>'

 Finished in 0.08435 seconds
 2 examples, 1 failure

请帮忙

编辑: 以下是我的spec文件的内容

users_controller_spec.rb

require 'spec_helper'

describe Api::V1::UsersController do
  before(:each) { request.headers['Accept'] = "application/vnd.marketplace.v1" }

  describe "GET #show" do
    before(:each) do
      @user = FactoryGirl.create :user
      get :show, id: @user.id, format: :json
    end

    it "returns the information about a reporter on a hash" do
      user_response = JSON.parse(response.body, symbolize_names: true)
      expect(user_response[:email]).to eql @user.email
    end

    it { should respond_with 200 }
  end
end

5 个答案:

答案 0 :(得分:5)

我有同样的问题并解决了它。看起来像使用旧版本的shoulda-matchers有帮助。我将Gemfile更改为gem "shoulda-matchers", "~>2.5"

答案 1 :(得分:5)

由于我们正在处理response codes,您可以使用 -

it { expect(response).to have_http_status(200) }

而不是it { should respond_with 200 }

此处也不需要shoulda-matchers宝石。

  

参考 - https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs

答案 2 :(得分:2)

如果您没有找到应该使用的方法,我会确保您在rails_helper.rbspec_helper.rb中有此方法:

config.include(Shoulda::Matchers::ActionController, { type: :model, file_path: /spec\/controllers/})

或者它可能在那里但是已经注释掉了。

答案 3 :(得分:0)

这似乎是来自shoulda-matchers gem的错误,请尝试更新到最新版本。

还要确保它出现在gemfile中的RSpec

之后
group :development, :test do
  gem 'rspec-rails'
  gem 'shoulda-matchers'
end

答案 4 :(得分:0)

将旧的rails应用升级到rails 5.0后出现此错误。然后将以下配置添加到spec_helper.rb中,现在它正常工作。

Shoulda::Matchers.configure do |config|
   config.integrate do |with|
     with.test_framework :rspec
     with.library :rails
   end
end