我正在开发一个应用程序,到目前为止,我一直在测试身份验证和请求响应代码等内容。但是测试有效载荷的结构似乎是个好主意。即。如果有嵌入资源或sidloaded资源。你们怎么测试这个。这是我正在做的一些测试的示例。我正在使用主动模型序列化器。但似乎有点像组织起来。
describe '#index' do
it 'should return an array of email templates' do
template = EmailTemplate.new(name: 'new email template')
EmailTemplate.stub(:all).and_return([template])
get :index
payload = {:email_templates => [JSON.parse(response.body)["email_templates"][0].symbolize_keys]}
template_as_json_payload = {:email_templates => [ActiveModel::SerializableResource.new(template).as_json[:email_template] ]}
expect(payload).to eq(template_as_json_payload)
end
end
答案 0 :(得分:0)
我喜欢为JSON响应定义模式,并验证测试中看到的任何响应是否符合它。仅凭这一点并不能保证响应的值是正确的,但它确实告诉您响应的结构符合您的期望。
然后,这些模式成为客户端实现可以引用的API文档的一部分。通过在测试中使用模式,我更有信心API文档不会与实现不同步。进行模式更改以获得通过测试也是一个很好的提示,我可以考虑更改是否对现有API客户端是安全的,或者我是否需要发布新的API版本。
Thoughtbot的人们有一个使用rspec验证模式的好例子:https://robots.thoughtbot.com/validating-json-schemas-with-an-rspec-matcher
答案 1 :(得分:0)
这是一种方法:
body = JSON.parse(response.body)
assert_equal(body.keys, ["id", "author"])
assert_equal(body["author"].keys, ["id", "name"])
但你应该查看 Jonah 分享的链接,这是值得一读的。