我目前正在研究Ruby / Sinatra应用程序,现在我被卡住了,因为我的rspec测试在控制器上运行不正常。但是当我使用curl或web尝试我的API时,代码才有用!。
这是我的文件,特别是那行代码
listproduct_controller.rb
get '/' do
products = Product.all
payload = []
products.each do |product|
payload.push({ :exhibit_name => product.exhibit_name, :icon => product.icon })
end
return {
:status => 'SUCCESS',
:message => 200,
:payload => payload
}.to_json
end
这是我的spec文件 listproduct_controller_spec.rb
context "GET to /products" do
before { allow(Product).to receive(:all) }
before { allow(Product).to receive(:find_by) }
it "returns status 200 OK" do
get '/'
puts(last_response)
expect(last_response).to be_ok
end
it "show a list of product's name and its icon" do
get '/'
@products = Product.all.to_a
expect(last_response.body).to include_json(@products)
end
end
当我将last_response放在spec上时,它显示了这个
500
{"Content-Type"=>"text/html", "Content-Length"=>"212150"}
#<Rack::BodyProxy:0x0000000480b1d8>
但是当我使用curl或apps时,它只是工作并返回 带有效负载的200状态代码
任何人都可以帮助我做错了吗?
更新:
我解决了,这是数据库上的问题,开发数据库中的所有产品都不在测试数据库中,因此返回500个空数据库。