javascript - 邮递员:如何验证 JSON 响应中的密钥
问题描述
我需要验证接下来的 2 个键:key1
和key2
:
{
"data": [
{
"id": "123",
"type": "something",
"created": "1540952074",
"test": [
{
"key1": "asd123",
"key2": "166802"
}
]
},
我只对验证这些密钥是否已经存在感兴趣。
我做了这个测试:
pm.test('returns the correct parameters by type', () => {
for (i = 0; i < jsonData.data.length; i++) {
if (jsonData.data[i].type === 'something') {
// for (j = 0; j < jsonData.data.test.length; j++) {
pm.expect(jsonData.data[i]).to.have.property('id');
pm.expect(jsonData.data[i]).to.have.property('type');
pm.expect(jsonData.data[i]).to.have.property('created');
pm.expect(jsonData.data[i].test[0]).to.have.property('key1');
pm.expect(jsonData.data[i].test[0]).to.have.property('key2');
}
}
});
返回以下错误:
returns the correct parameters by type | TypeError: Cannot read property '0' of undefined
但是,如果我将 console.log 与 一起放入jsonData.data[i].test[0]
,控制台会正确地将 2 个参数显示为对象:
Object:{}
key1:"asd123"
key2:"166802"
知道我该怎么做吗?
谢谢
解决方案
我真的看不到完整的响应数据,但这可能对你有用:
let jsonData = {
"data": [
{
"id": "123",
"type": "something",
"created": "1540952074",
"test": [
{
"key1": "asd123",
"key2": "166802"
}
]
}
]
}
pm.test("My Test", () => {
_.each(jsonData.data, (item) => {
if(item.type === "something") {
pm.expect(_.first(item.test)).to.have.keys('key1', 'key2')
}
})
})
由于这只是使用其上方对象中的数据进行测试的示例,jsonData
因此这不适用于您的响应数据。
你可以试试这个?
pm.test("My Test", () => {
_.each(pm.response.json().data, (data) => {
if(data.type === "something") {
_.each(data.test, (test) => {
pm.expect(test).to.have.keys('key1', 'key2')
})
}
})
})
推荐阅读
- javascript - 无法插入数组reactjs
- mysql - 致命错误:mysql.h:安装mariadb时没有这样的文件或目录
- python-3.x - 在 Selenium 中使用 HTML 标签导航到元素
- enterprise-architect - 如何将自定义 xml 文件导入我的 EA 模型
- visual-studio - 将 .NET Framework 4.8 迁移到 .NET 5
- python - 我的 RelativeLayout 显然忽略了我的 pos_hint
- mysql - 关于mysql索引为什么不能给所有字段添加索引
- kotlin - jOOQ 从记录中返回错误的列值
- blazor-server-side - 如何使 Blazor Web 服务器应用程序侦听端点中的 POST 请求?
- android - Android:使用Opengles在320x240屏幕上绘图,1080p图片预览会有莫尔条纹?