Сдача тестов с утверждением в WebStorm не удалась - PullRequest
4 голосов
/ 23 апреля 2020

Я пытаюсь запустить базовый c тест, используя mocha / chai / supertest. Когда я использую командную строку, я получаю информацию о том, что тест не пройден, но в WebStorm я получаю это

enter image description here

Вот код для теста

const chai = require('chai');
const chaiHttp = require('chai-http');
const request = require('supertest');
const app = require('../app');

const { expect, } = chai;

chai.use(chaiHttp);

const generateUser = (email, password, passwordRepeat) => ({ email, password, passwordRepeat, });

describe('Users', () => {
  describe('POST /users/register', () => {
    it('should get an error saying "Password is invalid"', () => {
      request(app)
        .post('/users/register')
        .send(generateUser('test@test.tes', 'invalid', 'invalid'))
        .expect(200)
        .end((err, res) => {
          expect(JSON.stringify(res.body)).to.equal(JSON.stringify({
            errors: [
              'Password is invalid',
            ],
            ok: false,
          }));
        });
    });
    it('should get an error saying "Passwords do not match"', () => {
      request(app)
        .post('/users/register')
        .send(generateUser('test@test.tes', 'zaq1@WSX', 'invalid2'))
        .end((err, res) => {
          expect(JSON.stringify(res.body)).to.equal(JSON.stringify({
            errors: [
              'Passwords do not match',
            ],
            ok: true,
          }));
        });
    });
    it('should get an error saying "Email is invalid"', () => {
      request(app)
        .post('/users/register')
        .send(generateUser('test@test.tessada', 'zaq1@WSX', 'zaq1@WSX'))
        .expect(200)
        .end((err, res) => {
          expect(JSON.stringify(res.body)).to.equal(JSON.stringify({
            errors: [
              'Email is invalid',
            ],
            ok: false,
          }));
        });
    });
  });
});

Интересно то, что это происходит только тогда, когда я запускаю тесты для блока описания. Так что несколько тестов одновременно. Если я запускаю только один тест, я получаю ошибку. Как я могу это исправить?

1 Ответ

2 голосов
/ 23 апреля 2020

Это асинхронный тест, и вам следует использовать обратный вызов done, предоставленный Mocha . В противном случае ваш it() тест завершается успешно sh до того, как утверждения запроса будут даже выполнены, что означает, что ничего не тестируя.

Supertest предлагает использовать его следующим образом:

   // add done parameter below
   it('should get an error saying "Password is invalid"', (done) => {
      request(app)
        .post('/users/register')
        .send(generateUser('test@test.tes', 'invalid', 'invalid'))
        .expect(200)
        .end((err, res) => {
          expect(JSON.stringify(res.body)).to.equal(JSON.stringify({
            errors: [
              'Password is invalid',
            ],
            ok: false,
          }));

          // call done() when test/assertions finished
          done();
        });
    });

Конечно, вы должны сделать это для всех ваших асинхронных тестов.

...