使用对象的可选阵列Frisby.js测试

问题描述 投票:0回答:2

如何使用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()
        });
});

这将无法正常工作,但是,由于路径(名单。*)将不会被定义,如果该列表属性不存在。有任何想法吗?

javascript testing web-api-testing joi frisby.js
2个回答
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()
                });
        }
    });
});

0
投票

通过这种方式,你可以这样做:

     .expect('jsonTypes',"data", {
        id: Joi.number(),
        type: Joi.string()
     })
    .expect('jsonTypes', "data.list",Joi.array().items({
        "id": Joi.number(),
        "size": Joi.number()    
    }))
    .then(function(res) {
        var body = res.body;
        body = JSON.parse(body);

    expect(body.data.id).toBeDefined();
    expect(body.data.type).toBeDefined();
    if(body.data.list)  {   
    for(var i = 0; i < body.data.list.length; i++){
    expect(body.data.list[i].id).toBeDefined();
    expect(body.data.list[i].type).toBeDefined();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.