为什么不推荐使用这种方法来检查 chai 中的 lengthOf() 数组?

Zee*_*cho 1 javascript unit-testing chai

我正在查看 Chai文档,我想知道因为在现场我没有看到任何解释为什么不推荐这样做。使用它会出现什么问题以及它有什么坏处?

我正在测试我的 API 调用是否返回数组中的 100 个对象。由于我的数据库中没有那么多条目,因此我想使用此代码。

Chai 网站上的代码示例:

expect('foo').to.have.lengthOf(3); // Recommended
expect('foo').to.have.lengthOf.at.most(4); // Not recommended
Run Code Online (Sandbox Code Playgroud)

我的测试示例:

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)
    })
});
Run Code Online (Sandbox Code Playgroud)

Nat*_*l C 5

不推荐这样做,因为它对于断言来说不是很具体。如果你使用at.most.(100)并且你的 API 返回 50 或 1 甚至一个空数组,它仍然会通过。该文档假设大多数人希望他们的测试在返回空数组时失败,并且更愿意检查确切的数字。

理想的情况是在数据库中创建 101 个条目(也许通过其他端点?),然后检查是否正好返回 100 个条目。但如果这非常困难,你至少可以检查是否大于 0,但小于 100

expect(res.body).to.have.lengthOf.at.least(1).and.lengthOf.at.most(100);
Run Code Online (Sandbox Code Playgroud)