ruby on rails - Rack测试失败: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 <top (required)>'
Finished in 2.29 seconds
1 example, 1 failure

这是我使用的helper模块…

# /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似乎忽略了description块的type: :api参数,并将/spec/api中的所有规范视为请求规范(参见这里的请求规范章节)。也许类型参数不适合使用?我还没有找到任何关于它的文档。

我可以让你的例子工作时,使用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

最新更新