`get` API 请求的 Rspec 测试中出现 `expected 200` 错误
`expected 200` error in Rspec test for `get` API request
我正在尝试编写一些 rspec 测试来检查仅 API 应用程序的 API 端点。
测试错误
Failure/Error: expect( res ).to be_success
expected 200 to respond to `success?`
但是,如果从另一个应用程序发出相同的调用(具有完整的 api url),它工作正常并且 returns 响应。
来自其他应用程序的示例:
res = RestClient.get "site.io/api/v1/projects/1"
p JSON.parse(res)
我尝试遵循的博客示例: (http://matthewlehner.net/rails-api-testing-guidelines/).
# spec/requests/api/v1/messages_spec.rb
describe "Messages API" do
it 'sends a list of messages' do
FactoryGirl.create_list(:message, 10)
get '/api/v1/messages'
json = JSON.parse(response.body)
# test for the 200 status-code
expect(response).to be_success
# check to make sure the right amount of messages are returned
expect(json['messages'].length).to eq(10)
end
end
我的申请
/requests/projects_spec.rb
require 'rails_helper'
RSpec.describe Project do
describe "show_project" do
before do
@project1 = create(:project)
end
it "Checks if responds successfully" do
res = get '/api/v1/projects/1'
expect( res ).to be_success
end
end
end
/factories/projects.rb
FactoryGirl.define do
factory :project do
name "Thing"
key "123123"
end
end
routes.rb
namespace :api, :defaults => { :format => 'json'} do
namespace :v1 do
resources :projects, only: [:create, :show]
end
end
end
我没有太多测试经验,所以如果有人能指出正确的方向,我将非常感激。
使用 Rspec 请求规范时,您对 get '/api/v1/projects/1'
的调用不需要由 res
变量捕获。当 get '/api/v1/projects/1'
为 运行 时,规范请求测试会自动设置 response
的值。您所遵循的示例是正确的,看起来您缺少一些关于 Rspec 在幕后为您处理多少的知识。这使您的测试更简单:
it "Checks if responds successfully" do
get '/api/v1/projects/1'
expect(response).to be_success
end
在 Rspec 请求测试中,response
是通过调用 get
自动设置的,无需您执行任何额外操作。
我正在尝试编写一些 rspec 测试来检查仅 API 应用程序的 API 端点。
测试错误
Failure/Error: expect( res ).to be_success
expected 200 to respond to `success?`
但是,如果从另一个应用程序发出相同的调用(具有完整的 api url),它工作正常并且 returns 响应。
来自其他应用程序的示例:
res = RestClient.get "site.io/api/v1/projects/1"
p JSON.parse(res)
我尝试遵循的博客示例: (http://matthewlehner.net/rails-api-testing-guidelines/).
# spec/requests/api/v1/messages_spec.rb
describe "Messages API" do
it 'sends a list of messages' do
FactoryGirl.create_list(:message, 10)
get '/api/v1/messages'
json = JSON.parse(response.body)
# test for the 200 status-code
expect(response).to be_success
# check to make sure the right amount of messages are returned
expect(json['messages'].length).to eq(10)
end
end
我的申请
/requests/projects_spec.rb
require 'rails_helper'
RSpec.describe Project do
describe "show_project" do
before do
@project1 = create(:project)
end
it "Checks if responds successfully" do
res = get '/api/v1/projects/1'
expect( res ).to be_success
end
end
end
/factories/projects.rb
FactoryGirl.define do
factory :project do
name "Thing"
key "123123"
end
end
routes.rb
namespace :api, :defaults => { :format => 'json'} do
namespace :v1 do
resources :projects, only: [:create, :show]
end
end
end
我没有太多测试经验,所以如果有人能指出正确的方向,我将非常感激。
使用 Rspec 请求规范时,您对 get '/api/v1/projects/1'
的调用不需要由 res
变量捕获。当 get '/api/v1/projects/1'
为 运行 时,规范请求测试会自动设置 response
的值。您所遵循的示例是正确的,看起来您缺少一些关于 Rspec 在幕后为您处理多少的知识。这使您的测试更简单:
it "Checks if responds successfully" do
get '/api/v1/projects/1'
expect(response).to be_success
end
在 Rspec 请求测试中,response
是通过调用 get
自动设置的,无需您执行任何额外操作。