我正在使用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 默认值 ,这会导致您的错误。
有关详细信息,请参阅链接。