为什么不推荐在 chai 中检查 lengthOf() 数组?
Why is this not recommended way of checking lengthOf() array in chai?
我正在查看 Chai documentation 我想知道,因为在现场我没有看到任何解释为什么不推荐这样做。使用它会出现什么问题,它有什么坏处?
我正在测试我的 API 调用是否 returns 数组中有 100 个对象。由于我的数据库中没有那么多条目,因此我想使用此代码。
Chai 网站上的代码示例:
expect('foo').to.have.lengthOf(3); // Recommended
expect('foo').to.have.lengthOf.at.most(4); // Not recommended
我的测试例子:
it('should return 100 object by default, if limit set to 0', (done) => {
chai.request(server)
.get('/api/v1/assets?limit=0')
.then((res) => {
expect(res).to.have.status(200);
expect(res.body).to.be.a('array');
expect(res.body).to.have.lengthOf.at.most(100);
done();
})
.catch((err) => {
done(err)
})
});
不推荐,因为它对断言来说不是很具体。如果你使用 at.most.(100)
和你的 API returns 50 或 1 甚至一个空数组,它仍然会通过。该文档假设如果 returns 一个空数组,大多数人会希望他们的测试失败,并且更愿意检查一个确切的数字。
理想的做法是在您的数据库中创建 101 个条目(也许通过其他端点?),然后检查是否正好返回 100 个条目。但如果这很困难,你至少可以检查大于 0,但小于 100
expect(res.body).to.have.lengthOf.at.least(1).and.lengthOf.at.most(100);
我正在查看 Chai documentation 我想知道,因为在现场我没有看到任何解释为什么不推荐这样做。使用它会出现什么问题,它有什么坏处?
我正在测试我的 API 调用是否 returns 数组中有 100 个对象。由于我的数据库中没有那么多条目,因此我想使用此代码。
Chai 网站上的代码示例:
expect('foo').to.have.lengthOf(3); // Recommended
expect('foo').to.have.lengthOf.at.most(4); // Not recommended
我的测试例子:
it('should return 100 object by default, if limit set to 0', (done) => {
chai.request(server)
.get('/api/v1/assets?limit=0')
.then((res) => {
expect(res).to.have.status(200);
expect(res.body).to.be.a('array');
expect(res.body).to.have.lengthOf.at.most(100);
done();
})
.catch((err) => {
done(err)
})
});
不推荐,因为它对断言来说不是很具体。如果你使用 at.most.(100)
和你的 API returns 50 或 1 甚至一个空数组,它仍然会通过。该文档假设如果 returns 一个空数组,大多数人会希望他们的测试失败,并且更愿意检查一个确切的数字。
理想的做法是在您的数据库中创建 101 个条目(也许通过其他端点?),然后检查是否正好返回 100 个条目。但如果这很困难,你至少可以检查大于 0,但小于 100
expect(res.body).to.have.lengthOf.at.least(1).and.lengthOf.at.most(100);