我正在尝试将RSpec与gem Airborne一起使用来测试人们在JSON响应中的字段值。来自API的对象。
代码:
it 'GET list of people objects where gender = male' do
get "/people?gender=male"
expect_json('people.*', {gender: 'MALE'})
end
因此,如果我的测试使用此特定过滤器(性别)进行API调用,我希望只会撤回具有男性性别的人。然而,这段代码失败了,因为每个人都会失败。对象有许多不同的键(:name,:age等)。我只想测试性别,但我无法通过它,因为expect_json期望人们中的所有键都被写入测试。
我已经梳理了Google / Airborne文档,但无济于事: https://github.com/brooklynDev/airborne
答案 0 :(得分:1)
这是占位符回答 - 寻求更多细节:
这个link从Airborne示例产生JSON以下:
{
"cars": [{
"make": "Tesla",
"model": "Model S",
"owners": [
{"name": "Bart Simpson"}
]
}, {
"make": "Lamborghini",
"model": "Aventador",
"owners": [
{"name": "Peter Griffin"}
]
}]
}
这是一个RSpec测试(它使用有效的Internet URL,所以任何人都可以尝试)
require 'airborne'
describe 'sample spec' do
it 'should validate car make' do
get 'https://raw.githubusercontent.com/brooklynDev/airborne/master/spec/test_responses/array_with_nested.json'
expect_json('cars.*', make: 'Tesla')
end
end
如果您使用rspec <filename>.rb
运行上述测试,则会出现如下错误。由于其中一个JSON条目没有make
为Tesla
,因此会出现此错误。但是,该示例演示了Airborne能够查看给定JSON数组中所有嵌套JSON对象的单个属性。
E:\elixir>rspec fun.rb
F
Failures:
1) sample spec should validate car make
Failure/Error: expect_json('cars.*', make: 'Tesla')
expected: "Tesla"
got: "Lamborghini"
(compared using ==)
# ./fun.rb:6:in `block (2 levels) in <top (required)>'
Finished in 3.98 seconds (files took 0.68346 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./fun.rb:4 # sample spec should validate car make
请使用示例JSON和RSpec输出更新您的问题,以显示您的代码与上述示例的相似之处,就像它是,您不应该遇到此问题。