Почему это не рекомендуемый способ проверки массива lengthOf () в chai? - PullRequest
0 голосов
/ 09 апреля 2019

Я просматриваю Chai документацию и мне интересно, потому что на сайте я не вижу никакого объяснения, почему это не рекомендуемый способ сделать это.Что может пойти не так, используя это, и что плохого в этом?

Я проверяю свои вызовы API, если он возвращает 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)
    })
});

1 Ответ

2 голосов
/ 09 апреля 2019

Это не рекомендуется, потому что оно не очень специфично для утверждения. Если вы используете at.most.(100) и ваш API возвращает 50 или 1 или даже пустой массив, он все равно пройдет. В документации делается предположение, что большинство людей хотели бы, чтобы их тест не прошел, если он возвращает пустой массив, и предпочли бы проверить точное число.

Идеально было бы создать 101 запись в вашей базе данных (возможно, через какую-то другую конечную точку?), А затем проверить, что будет возвращено ровно 100. Но если это очень сложно, вы можете хотя бы проверить больше 0, но меньше 100

expect(res.body).to.have.lengthOf.at.least(1).and.lengthOf.at.most(100);
...