机架测试失败:JSON请求尚未响应

我正在尝试按照Yehuda Katz的书“ Rails 3 in Action”第13章中提供的Ticketee示例为我的Ruby项目创建一个JSON API。这是一个适用于我的环境的第353页描述的RSpec测试。

# /spec/api/v1/farms_spec.rb # Reduced to the minimum code. require "spec_helper" include ApiHelper # not sure if I need this describe "/api/v1/farms", type: :api do context "farms viewable by this user" do let(:url) { "/api/v1/farms" } it "json" do get "#{url}.json" assert last_response.ok? end end end 

当我运行测试时,我得到以下输出…

 $ rspec spec/api/v1/farms_spec.rb No DRb server is running. Running in local process instead ... Run options: include {:focus=>true} All examples were filtered out; ignoring {:focus=>true} 1) /api/v1/farms farms viewable by this user json Failure/Error: assert last_response.ok? Rack::Test::Error: No response yet. Request a page first. # ./spec/api/v1/farms_spec.rb:30:in `block (3 levels) in ' Finished in 2.29 seconds 1 example, 1 failure 

这是我使用的辅助模块……

 # /support/api/helper.rb module ApiHelper include Rack::Test::Methods def app Rails.application end end RSpec.configure do |config| config.include ApiHelper, type: :api end 

注意 :此问题类似于使用Rspec和Rack :: Test测试REST-API响应 。

Rspec-rails似乎忽略了describe块的type: :api参数,并将/ spec / api中的所有规范视为请求规范(请参阅此处的请求规范一章) 。 也许不推荐使用type-parameter? 我还没有找到任何文件..

当使用type: :request而不是type: :api时,我可以让你的例子工作。 我还删除了app-method,因为它默认已包含在RequestExampleGroup中。

 # /support/api/helper.rb module ApiHelper include Rack::Test::Methods end RSpec.configure do |config| config.include ApiHelper, type: :request end 

规格:

 #/spec/api/v1/farms_spec.rb require "spec_helper" describe "/api/v1/farms" do context "farms viewable by this user" do let(:url) { "/api/v1/farms" } it "json" do get "#{url}.json" assert last_response.ok? end end end 
Interesting Posts