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

标签 javascript unit-testing mocha.js webstorm chai

我正在尝试使用 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,
          }));
        });
    });
  });
});

有趣的是,这只发生在我在描述 block 上运行测试时。因此一次进行多个测试。如果我只运行一项测试,我会得到错误。我该如何解决?

最佳答案

这是一个异步测试,您应该使用 done Mocha 提供的回调.否则,您的 it()测试在请求断言甚至运行之前成功完成,这意味着无需测试任何东西。

超测suggests像这样使用它:

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

当然,您应该为所有异步测试执行此操作。

关于javascript - 在 WebStorm 中通过断言的测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61386678/

相关文章:

javascript - ReactJS 数组中出现随机逗号

javascript - 使用单引号(撇号)转义将事件记录对象解析为 json

unit-testing - 如何对 Jackson JsonSerializer 和 JsonDeserializer 进行单元测试

javascript - 如何将node js util.promisify与writeFile fs函数和await一起使用

使用箭头函数与函数表达式创建 Javascript 对象

javascript - 如何添加链接到我的自定义 javascript 图像交换?

node.js - 鉴于返回结果始终是加密的,如何对我的请求进行单元测试?

javascript - 麻烦单元测试 Angular react 性表单字段

javascript - Mocha 一开始从 MongoDb 查找用户,稍后创建

javascript - enzyme 安装/浅一次在 Mocha 上钩之前