【发布时间】:2023-01-12 04:48:27
【问题描述】:
我不确定这是一个直接的 rspec 错误,但是在测试控制器操作时,我们希望我们的响应是我们正在获取的实例的 json 对象。我们收到的是一个 json 对象
=> render(json: @instance)
"{\"type\":\"class_name\"}"
如果我在渲染时在我的实例上手动调用“.to_json”
=> render(json: @instance.to_json)
<full object json response>
我得到了我的整个对象的完整响应,这是预期的行为并且与开发和生产环境相匹配。
我看不出为什么在从 rspec 调用时不调用隐式 'to_json' 的原因,这在 rails 文档中有说明
任何帮助是极大的赞赏。 TIA
编辑
控制器动作
def show
render(json: @book)
end
book_controller_spec.rb 'json' 是一个自定义的 JSONHelper,它只解析 response.body
RSpec.describe(Api::V1::BooksController, type: :controller) do
before :each do
create(:book)
end
context '#show' do
it 'returns the book with the correct ID' do
get :show, params: { id: 1 }
puts response.body
json_response = JSON.parse(response.body, symbolize_names: true)
expect(json_response[:id]).to(eq(1))
end
end
end
回复
{"type":"book"}
【问题讨论】:
-
你能发布相关代码吗(例如测试和它正在测试的控制器动作?)
-
按要求编辑
-
1) 你能告诉我们
json的代码吗? 2) 检查response.body。 3)什么是实际测试失败? -
1) JSON.parse(response.body, symbolize_names: true) 2) "{\"type\":\"class_name\"}" 3) 我不担心测试失败,因为我们无法获得一个对象还没有测试。它应该返回一个带有 id、名称等的完整对象,但我们只得到问题 2 的响应
-
出于这个问题的目的,我建议用 JSON 解析、清晰的测试和测试结果替换
json函数,它对我们来说是不透明的。为了确定,我也会在控制器中使用p @book。
标签: json ruby-on-rails rspec render rspec-rails