json - 尝试检查 JSON 字段值是否不为空或未定义时邮递员测试错误
问题描述
我正在尝试在 Postman 中为 GET 请求创建一个测试,以检查存储在每个对象的 'name' 字段中的值是否不同于null和undefined,但我收到以下消息“TypeError: Cannot read property 'name ' of undefined" 这是我正在使用的 JSON 主体的示例:
[
{
"id":1,
"name": "Peter"
},
{
"id":2,
"name":"Stewie"
},
{
"id":3,
"name":"Brian"
}
]
这是测试的JS代码:
pm.test(``, function(){
var response = JSON.parse(responseBody)
var result = true
for (i=0;i<=response.length;i++){
if(!response[i].name){
result = false}
}
pm.expect(result).to.eql(true)
});
我尝试过的事情:
var jsonData = pm.response.json();
使用而不是 获取 JSON 正文var response = JSON.parse(responseBody)
- 对IF语句
使用以下条件:
!response[i]['name']
- 将“名称”值存储在全局变量中,如下所示:
pm.test(``, function(){
var response = JSON.parse(responseBody)
var result = true
for (i=0;i<=response.length;i++){
pm.globals.set("variable_name", response[i]['name'];
var name = pm.globals.get("variable_name");
if(!name){
result = false}
}
pm.expect(result).to.eql(true)
});
谢谢!
解决方案
它是一个超出索引错误的数组,您正在检查 i 直到它等于 response.lenght
所以最后一个值将是 response[response.length] ,没有元素最后一个元素是 response[response.length-1] 。所以只需从 for 循环中删除 equal
pm.test(``, function(){
var response = JSON.parse(responseBody)
var result = true
for (i=0;i<response.length;i++){
if(!response[i].name){
result = false}
}
pm.expect(result).to.eql(true)
});
但正确的做法是做模式valdiaiton:
let schema = {
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "http://example.com/example.json",
"type": "array",
"title": "The root schema",
"description": "The root schema comprises the entire JSON document.",
"default": [],
"examples": [
[
{
"id": 1,
"name": "Peter"
},
{
"id": 2,
"name": "Stewie"
}
]
],
"additionalItems": true,
"items": {
"$id": "#/items",
"anyOf": [
{
"$id": "#/items/anyOf/0",
"type": "object",
"title": "The first anyOf schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"examples": [
{
"id": 1,
"name": "Peter"
}
],
"required": [
"id",
"name"
],
"properties": {
"id": {
"$id": "#/items/anyOf/0/properties/id",
"type": "integer",
"title": "The id schema",
"description": "An explanation about the purpose of this instance.",
"default": 0,
"examples": [
1
]
},
"name": {
"$id": "#/items/anyOf/0/properties/name",
"type": "string",
"title": "The name schema",
"description": "An explanation about the purpose of this instance.",
"default": "",
"examples": [
"Peter"
]
}
},
"additionalProperties": true
}
]
}
}
pm.test("Status code is 200", function () {
pm.response.to.have.jsonSchema(schema);
});
您可以使用以下方式生成架构:https ://jsonschema.net/home
名称为 null 时的邮递员输出:
推荐阅读
- ios - UIPageViewController 具有未知数量的 UIViewController 实例
- python - 如何在提交时将表单添加到字典
- python - Python,从按钮列表中删除项目
- opendaylight - Opendaylight 中的 Loop Remover 功能
- python - 我正在尝试使用 python 对字符串进行一些手动编码
- python - 在 Kivy 中使用 Fbo 渲染根小部件
- javascript - 如何使用 javascript 和 php 禁用数字输入类型
- google-api - 带有 dart 的 Google 认证 HTTP 客户端
- c# - 函数签名中的 [] 在 C# 中的作用
- wordpress - Gutenberg ServerSideRender 回调