Javascript 如何使用Postman验证响应正文中可能包含null或字符串的节点?

Javascript 如何使用Postman验证响应正文中可能包含null或字符串的节点?,javascript,testing,automated-tests,postman,chai,Javascript,Testing,Automated Tests,Postman,Chai,我需要验证API响应体中的特定节点是null还是字符串。如何在邮递员测试中使用ChaiJS API响应主体示例: [ { "exercise_num": "1", "expire_date": "2019-03-11T16:31:17.935Z", "created_at": "2019-03-15T11:44:35.698Z" }, { "exercise_num": "2", "expire_date": null, "created_at":

我需要验证API响应体中的特定节点是null还是字符串。如何在邮递员测试中使用ChaiJS

API响应主体示例:

[
 {
   "exercise_num": "1",
   "expire_date": "2019-03-11T16:31:17.935Z",
   "created_at": "2019-03-15T11:44:35.698Z"
 },
 {
    "exercise_num": "2",
    "expire_date": null,
    "created_at": "2019-03-15T11:44:38.363Z"
 }
]
我想验证上述示例API响应主体中的expire_date节点是否只包含null或字符串数据类型,并且不会返回任何其他数据类型,如int等

我尝试了以下方法:

var jsonData = JSON.parse(responseBody);
pm.test('All expire_date contains either string or null', () => {
for (i = 0; i < jsonData.length; i++) {
if(jsonData[i].expire_date === null){
tests["expire_date is null"] = true;
}
else{
    pm.expect(jsonData[i].expire_date).to.be.a('string');
}
}
});
var jsonData=JSON.parse(responseBody);
test('All expire_date包含字符串或null',()=>{
对于(i=0;i
考试通过了

我期待着这样的事情能够实现:

pm.test('All expire_date contains string', () => {
for (i = 0; i < jsonData.length; i++) {
    pm.expect(jsonData[i].expire_date).to.be.a('string' || null);
}
});
pm.test('All expire\u date包含字符串',()=>{
对于(i=0;i
我相信使用
|
操作符没有直接的方法,但是您可以检查数据类型。由于
null
是javaScript中的
对象
类型,请按如下方式编写测试用例:

var jsonData = JSON.parse(responseBody);

pm.test('All expire_date contains string', () => {

    for (i = 0; i < jsonData.length; i++) {            
        pm.expect(typeof jsonData[i].expire_date).to.be.oneOf(['string', 'object']);
    }
});
var jsonData=JSON.parse(responseBody);
test('All expire\u date包含字符串',()=>{
对于(i=0;i
这可能是一种简单的方法,可以用于简单的检查。但是,我建议您使用第二种方法,即使用最快的JSON模式验证器

var Ajv = require('ajv'),
ajv = new Ajv({logger: console}),
schema = {
    "properties": {
        "expireDate": {
            "type": ["string","null"]
        }
    }
};

var jsonData = JSON.parse(responseBody);

pm.test('All expire_date contains string', function() {
    for (i = 0; i < jsonData.length; i++) {
        pm.expect(ajv.validate(schema, {expireDate: jsonData[i].expire_date})).to.be.true;
    }
});
var Ajv=require('Ajv'),
ajv=新的ajv({logger:console}),
模式={
“财产”:{
“到期日”:{
“类型”:[“字符串”,“空”]
}
}
};
var jsonData=JSON.parse(responseBody);
test('All expire_date包含字符串',函数(){
对于(i=0;i

如果希望在多个请求中检查此项,请将架构置于集合级别。

我尝试使用第二种方式,但postman抛出以下错误:评估测试脚本时出错:错误:找不到模块“ajv”@Nooryaserkhan:使用相同版本检查,你能试着把版本降级到v
6.7.4
?我不知道之前发生了什么。现在v.7.0.7运行良好。非常感谢你的回答。