首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用可选的对象数组进行Frisby.js测试

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

Stack Overflow用户
提问于 2018-11-20 07:22:55
回答 2查看 817关注 0票数 0

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

代码语言:javascript
复制
{
  "id": "123",
  "type": "A",
  "list": [
      {
         "id": "111",
         "size": 1
      }, 
      {
         "id": "222",
         "size": 2
      }
  ]
}

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

代码语言:javascript
复制
{
  "id": "456",
  "type": "B"
}

目前,我正在尝试:

代码语言:javascript
复制
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.*)。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2018-11-27 06:26:23

在有人想出更有效的方法之前,我有一个变通的办法。这种方法看起来效率很低,因为它需要多次API调用。要点是首先检查可选数组是否存在。如果是这样,您可以使用另一个API调用,并使用路径进行适当的检查。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-02-09 13:11:23

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

代码语言:javascript
复制
     .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();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53384074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档