【发布时间】:2021-01-18 19:43:41
【问题描述】:
我想在我的 Shipment 控制器中测试显示操作。为此,我准备了相当简单的规格:
RSpec.describe ShipmentsController, type: :controller do
describe 'GET #show' do
let(:params) { { id: shipment.id, product_id: product.id } }
let!(:product) { create(:product) }
let!(:shipment) { create(:shipment, product: product) }
context 'when params are valid' do
before { get :show, params: params }
it 'return valid json' do
expect(JSON.parse(response.body)).to eq(expected_json)
end
end
end
end
ShimpentsController.rb
class ShipmentsController < ApplicationController
before_action :set_product
attr_reader :shipment
def show
@shipment = Shipment.find(params[:id])
@items = shipment&.grouped_shipment_items
end
private
def set_product
@product = Product.find(params[:product_id])
end
end
当我使用邮递员时,一切顺利 - 它返回预期的 json,但在 RSpec 测试中我得到:
response.body
=> ""
【问题讨论】:
-
你用什么来返回json? jbuilder?
-
您是否尝试过在调试模式下运行 rspec 来检查值。默认情况下,rails 操作将返回 HTML,除非指定返回 json。我在这里没有看到那个代码,你能详细说明一下吗
-
@Clara 是的,我正在使用 jbuilder 返回 json
-
除非这是遗留代码,否则您真的应该编写请求规范。 rails 和 RSpec 团队都不鼓励使用控制器规范。 relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec
标签: ruby-on-rails ruby rspec