2

我想用 rspec 测试 API 控制器。所以这是一段简单的代码:

require 'rails_helper'  
describe "GET /api/config" do

  it 'routes GET to /api/config to Api::V1::ConfigsController#show' do
    get '/api/config.json'
    expect(response).to be_success
  end

end

但我有一个错误:

1) Configs API GET /api/config routes GET to /api/config to Api::V1::ConfigsController#show
     Failure/Error: expect(response).to be_success
     NameError:
       undefined local variable or method `response' for #<RSpec::ExampleGroups::ConfigsAPI::GETApiConfig:0x007f84d93fbb90>
     # ./spec/routing/api/v1/devise/configs_routing_spec.rb:13:in `block (3 levels) in <top (required)>'
4

3 回答 3

2

RSpec 3你会做:

get '/api/config.json'
expect(response.status).to be(200)

您缺少的是描述块中的类型声明,即:

describe "GET /api/config", type: :controller do
end
于 2014-07-16T13:31:25.497 回答
2

您的控制器规格在 specs/controller 目录中吗?如果不是,那么 Rspec 需要您通过使用元数据标记 describe 来明确声明它们是控制器规范:type => :controller这是因为该response变量仅在您的规范设置为控制器规范时才可用,即

require 'rails_helper'  
describe "GET /api/config", type: :controller do

  it 'routes GET to /api/config to Api::V1::ConfigsController#show' do
    get '/api/config.json'
    expect(response).to be_success
  end

end

也看看这里

于 2015-02-09T12:49:54.137 回答
0

你可以试试这个语法

describe "GET /api/config", type: :controller do

  it 'routes GET to /api/config to Api::V1::ConfigsController#show' do
    get '/api/config.json'
    expect(last_response.status).to be(200)
  end

end

使用expect(last_response.status).to be(200)而不是仅响应

这个对我有用!

仅供参考:我正在使用 rails 5

于 2016-09-28T15:50:56.103 回答