首页 文章

Frisby.js使用可选的对象数组进行测试

提问于
浏览
0

如何使用Frisby.js测试包含对象的可选数组?例如,假设我们有一个返回类似这样的API调用:

{
  "id": "123",
  "type": "A",
  "list": [
      {
         "id": "111",
         "size": 1
      }, 
      {
         "id": "222",
         "size": 2
      }
  ]
}

但是,它也可能会返回以下内容:

{
  "id": "456",
  "type": "B"
}

目前,我正在尝试:

const frisby = require('frisby');
const Joi = frisby.Joi;

test('myTest', () => {
    return frisby
        .get(myUrl)
        .expect('status', 200)
        .expect('jsonTypes', {
            id: Joi.string().required(),
            type: Joi.string().required().
            list: Joi.array().optional()
        })
        .expect('jsonTypes', 'list.*', {
            id: Joi.string().required(),
            size: Joi.number().required()
        });
});

但是,这不起作用,因为如果list属性不存在,则不会定义路径(list . *) . 有任何想法吗?

1 回答

  • 0

    我有一个解决方法,直到有人找到一个更有效的方法 . 这种方法似乎效率低下,因为它需要多次API调用 . 要点是首先检查可选数组是否存在 . 如果是这样,您可以使用另一个API调用并使用该路径进行相应的检查 .

    const frisby = require('frisby');
    const Joi = frisby.Joi;
    
    test('myTest', () => {
        return frisby
        .get(myUrl)
        .expect('status', 200)
        .expect('jsonTypes', {
            id: Joi.string().required(),
            type: Joi.string().required().
            list: Joi.array().optional()
        })
        .then(function (response) {
            if(response._json.list) {
                return frisby
                    .get(myUrl)
                    .expect('jsonTypes', 'list.*', {
                        id: Joi.string().required(),
                        size: Joi.number().required()
                    });
            }
        });
    });
    

相关问题