我正在尝试按照Yehuda Katz的书Ticketee第13章中提供的Rails 3 in Action示例为我的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
这是我使用的辅助模块......
# /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
注意:此问题与Testing REST-API responses with Rspec and Rack::Test类似。
答案 0 :(得分:4)
Rspec-rails似乎忽略了describe块的type: :api
参数,并将/ spec / api中的所有规范视为请求规范(see chapter request specs here)。也许不推荐使用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