RSpec 类型请求和 jb gem



我正在使用rspec来测试我的API。为了创建获取请求的响应,我使用的是 jb gem。

例:

RSpec.describe 'Tax Invoice API', type: :request do
describe 'GET /tax_invoice' do
context('when request is valid') {
it 'get pending tax invoice' do
invoice = FactoryBot.create(:invoice)
get "/tax_invoice/#{invoice.extern_orderno}"
# ...
end
end
end
end

控制器:

def show
@invoice = Invoice.where(extern_orderno: params['id'])&.first
end

view(show.json.jb(:

# frozen_string_literal: true
{
extern_orderno: params['id'],
status: @invoice.nil? ? 'NOT_AVAILABLE' : @invoice.status,
url: @invoice&.url,
created_at: @invoice&.created_at,
address: @invoice&.address&.to_hash,
postal_address: @invoice&.postal_address&.to_hash
}.compact

构造工作正常,期望测试不起作用。我总是得到:

ActionController::UnknownFormat: TaxInvoiceController#show is missing a template for this request format and variant.
request.formats: ["text/html"]
request.variant: []

当我打电话测试时。有人知道我做错了什么吗?

谢谢。

在测试请求中显式设置格式 - 否则设置为默认值html


it 'get pending tax invoice' do
invoice = FactoryBot.create(:invoice)
get "/tax_invoice/#{invoice.extern_orderno}", format: :json # <<<<<<<<<
# ...
end

这通常发生在您的请求是 JS 或其他格式时,我没有看过,但 JS 如下:

get "/tax_invoice/#{invoice.extern_orderno}", xhr:true

对于其他格式,请放置:

get "/tax_invoice/#{invoice.extern_orderno}", format:json

请注意,如果未指定,它将使用 html 默认值 ,这会导致您的错误。

有关详细信息,请参阅链接。

最新更新