Rspec与app不同

时间:2018-03-20 09:17:08

标签: ruby rspec sinatra

我目前正在研究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个空数据库。

0 个答案:

没有答案