赛普拉斯请求:主体中的空数组

时间:2018-08-10 13:25:01

标签: javascript cypress

在使用赛普拉斯测试我的API时,我发现自己遇到了一些麻烦。 (我正在使用2.1.0版)

我正在向我的端点发送一个请求,并想验证当我发送一个空数组作为参数时它是如何反应的。问题在于,赛普拉斯必须以某种方式解析我给他的尸体,并删除空数组。

我的代码如下:

cy.request({
    method: 'PUT',
    url,
    form: true,
    body: {
        name: 'Name',
        subjects: []
    }
})
.then((response) => {
    expect(response.body).to.have.property('subjects');
    const { subjects } = response.body;
    expect(subjects.length).to.eq(0);
});

// API receives only the parameter name, and no subjects

当我发送空主题数组时,端点将删除所有关联的主题,并返回带有空主题数组的对象。它可以按预期运行,而我正在使用的软件也可以按预期运行。

当Cypress发送此请求时,端点接收参数主题。这对我来说是非常不同的事情:在这种情况下,我不应该碰触主题。

有没有一种方法可以避免赛普拉斯的这种“重写”并在我编写正文时将其发送出去?

1 个答案:

答案 0 :(得分:4)

设置Math.max(num1, num2)时测试有效。

form: false

我使用json-server设置了本地Rest服务器来检查行为。

如果我尝试使用it.only('PUTs a request', () => { const url = 'http://localhost:3000/mythings/2' cy.request({ method: 'PUT', url: url, form: false, body: { name: 'Name', subjects: [] } }) .then((response) => { expect(response.body).to.have.property('subjects'); const { subjects } = response.body; expect(subjects.length).to.eq(0); }); }) 放置一个非空数组

form: true

运行测试后,查看 db.json ,我看到项目索引迁移到密钥

cy.request({
    method: 'PUT',
    url: url,
    form: true,
    body: {
      name: 'Name',
      subjects: ['x']
    }
  })

所以也许"mythings": [ { "name": "Name", "subjects[0]": "x", "id": 2 } ], 仅意味着简单的属性。

更改为form会得到一个适当的数组

form: false

然后可以通过发布一个空数组将其清空。