Javascript 通过断言的测试在WebStorm中失败

Javascript 通过断言的测试在WebStorm中失败,javascript,unit-testing,mocha.js,webstorm,chai,Javascript,Unit Testing,Mocha.js,Webstorm,Chai,我正在尝试使用mocha/chai/supertest运行一个基本测试。当我使用命令行时,我得到测试失败的信息,但在WebStorm中我得到了这个信息 这是测试的代码 const chai = require('chai'); const chaiHttp = require('chai-http'); const request = require('supertest'); const app = require('../app'); const { expect, } = chai;

我正在尝试使用mocha/chai/supertest运行一个基本测试。当我使用命令行时,我得到测试失败的信息,但在WebStorm中我得到了这个信息

这是测试的代码

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,
          }));
        });
    });
  });
});

有趣的是,只有当我在描述块上运行测试时,才会发生这种情况。因此,一次进行多个测试。如果我只运行一个测试,就会得到错误。如何修复它?

这是一个异步测试,您应该使用提供的
done
回调。否则,您的
it()

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();
        });
    });

当然,对于所有异步测试,您都应该这样做。

这很有效。奇怪的是,它没有在cli中完成,但不能在webstorm中完成。是的,这很奇怪。你可以感谢Webstorm,否则你就不知道测试没有测试任何东西。这件事最近也发生在我身上。测试助手中的一个小的
返回
错误,一些测试总是这样通过。。。