Как заставить мокко подождать, прежде чем перейти к следующему тесту - PullRequest
0 голосов
/ 13 января 2019

Когда я запустил npm-тест, я получил 'TypeError [ERR_HTTP_INVALID_HEADER_VALUE]: недопустимое значение "undefined" для заголовка "x-access-token" ". Похоже, мокко переходит ко второму тесту, прежде чем получить токен. Я попытался добавить задержку с помощью метода setTimeOut, но я все еще получил ошибку выше.

 // creates valid-user object
    const validUser = {
      username: 'Rigatoni',
      email: 'yahoo.com',
      password: 'qwerty1234567',
    };
    describe('Post Tests', () => {
      // login and get token...
      let token;
      before((done) => {
        request(app)
          .post('/api/v1/auth/login')
          .send(validUser)
          .end((err, res) => {
            // eslint-disable-next-line prefer-destructuring
            token = res.body.token;
            console.log('token', token);
            expect(res.status).to.equal(200);
          });
        // console.log('token test');
        done();
      });

      describe('GET all posts', () => {
        it('should return all posts', (done) => {
          request(app)
            .get('/api/v1/posts')
            .set('x-access-token', token)
            .end((err, res) => {
              expect(res.body.success).to.equal(true);
            });
          done();
        });
      });
    });

1 Ответ

0 голосов
/ 13 января 2019

Ваши тесты почти правильные!

Предоставляется обратный вызов done, чтобы сообщить Мокко, когда можно двигаться дальше. Тем не менее, вы вызываете done() в своих тестах прямо после вызова асинхронного метода request; Мокко считает, что тест завершен еще до того, как вы сделаете запрос.

Переместите ваш вызов done() для каждого теста в функцию обратного вызова (например, в строку сразу после вашего expect()), чтобы он не выполнялся до тех пор, пока не завершится запрос. Тогда Мокко будет ждать, пока тест не закончится, прежде чем двигаться дальше.

Пример:

request(app)
        .get('/api/v1/posts')
        .set('x-access-token', token)
        .end((err, res) => {
          expect(res.body.success).to.equal(true);
          done();
        });
...