Mocha未显示任何失败测试的详细信息

时间:2018-08-17 04:59:15

标签: node.js sails.js mocha

我正在将一个应用程序从Sails.js v0.12迁移到v1.0,其中包括将摩卡从^ 3.5.0升级到^ 5.2.0。我认为这是问题的根源,但我似乎找不到解决方法。

之前,如果测试失败,则在mocha报告程序输出的末尾将有一个错误摘要:失败的特定断言,文件名,行号,错误消息等。现在,报告程序正在着色红色的 it 块,但未显示其他详细信息。

我尝试更改mocha.opts中的报告程序,该报告程序可用于实际执行输出,但最后没有启用摘要。我想念什么?

Bill

在控制台中:

// ./test/integration/models/User.test.js

describe('User', () => {

  describe('find()', () => {
    it('should return an array of users', () => {
      return User.find()
      .then((users) => {

        users.should.be.a('array');
        true.should.be.false;  // No problems if this is removed

      });
    });
  });

});

3 个答案:

答案 0 :(得分:1)

您可以使用完成回调。 Mocha文档中建议的第一个策略是使用“完成”回调。这是it中回调的一个额外参数。您在测试中的最后一个断言之后调用它。

我已经看到许多人以错误的方式使用done()方法。例如,查看下面的代码

describe('User', () => {

  describe('find()', () => {
    it('should return an array of users', (done) => {
      return User.find()
      .then((users) => {

        users.should.be.a('array');
        true.should.be.false;  // No problems if this is removed
        done();

      });
    });
  });

});

上面的测试可以正常工作并显示测试通过,但是在同一个then回调中调用done()是一个坏主意,因为上面的代码可以很好地工作,直到您的期望失败,您可能会遇到类似 enter image description here

上述故障不是很有用。如果我们想利用摩卡咖啡的错误,我们不应该从相同的then()回调中调用done()。见下面的测试

describe('User', () => {

    describe('find()', () => {
        it('should return an array of users', (done) => {
            return User.find()
                .then((users) => {

                    users.should.be.a('array');
                    true.should.be.false;
                })
                .then(() => done(), done)
                .catch((error) => {
                    done(error);

                });
        });
    });
});

不要忘记用catch块包装您的错误。 现在,您可以在摩卡咖啡的失败消息中看到实际值和预期值之间的差异。

答案 1 :(得分:0)

请尝试将完成的回调添加到测试用例中。

describe('User', () => {

  describe('find()', () => {
    it('should return an array of users', (done) => {
      return User.find()
      .then((users) => {

        users.should.be.a('array');
        true.should.be.false;  // No problems if this is removed
        done();

      });
    });
  });

});

答案 2 :(得分:0)

结果证明Mocha很好,我的测试定义也很好,我只是错误地解决了一个完全不同的迁移问题。从mocha will no longer automatically kill itself版本4开始,它认为所有测试都已完成。这意味着必须使用以下两个选项之一:

  1. --exit添加到mocha.opts或命令被调用的任何地方
  2. 在测试套件的JavaScript中运行process.exit()

我通过在测试引导文件的process.exit()块中添加after()来尝试第二种选择。 这是个坏主意,导致上面的行为令人困惑。

为解决我的问题,我删除了对after()块的更改,并将--exit添加到mocha.opts。感谢Dhruv Choudhary为我指出了正确的方向。