在使用赛普拉斯测试我的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发送此请求时,端点不接收参数主题。这对我来说是非常不同的事情:在这种情况下,我不应该碰触主题。
有没有一种方法可以避免赛普拉斯的这种“重写”并在我编写正文时将其发送出去?
答案 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
然后可以通过发布一个空数组将其清空。