Node.js 摩卡咖啡不是';t显示失败测试的任何详细信息
我正在将一个应用程序从Sails.js v0.12迁移到v1.0,其中包括将摩卡从^3.5.0升级到^5.2.0。我认为这是问题的根源,但我似乎找不到解决办法 以前,当测试失败时,mocha reporter输出的末尾会有一个错误摘要:失败的特定断言、文件名、行号、错误消息等。现在,reporter将it块涂成红色,但不会显示其他详细信息 我曾尝试在mocha.opts中更改reporter,它适用于实际的执行输出,但最终没有启用摘要。我错过了什么Node.js 摩卡咖啡不是';t显示失败测试的任何详细信息,node.js,sails.js,mocha.js,Node.js,Sails.js,Mocha.js,我正在将一个应用程序从Sails.js v0.12迁移到v1.0,其中包括将摩卡从^3.5.0升级到^5.2.0。我认为这是问题的根源,但我似乎找不到解决办法 以前,当测试失败时,mocha reporter输出的末尾会有一个错误摘要:失败的特定断言、文件名、行号、错误消息等。现在,reporter将it块涂成红色,但不会显示其他详细信息 我曾尝试在mocha.opts中更改reporter,它适用于实际的执行输出,但最终没有启用摘要。我错过了什么 // ./test/integration/m
// ./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
});
});
});
});
在控制台中:
> node ./node_modules/mocha/bin/mocha test/lifecycle.test.js test/integration/**/*.test.js
√ OtherModel method() should do something: 17ms
1) User find() should return an array of users
'Done.'
PS C:\repos\myproject>
请尝试将“完成”回调添加到测试用例中
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();
});
});
});
});
您可以使用done回调。mocha文档中建议的第一个策略是使用“done”回调。这是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()是一个坏主意,因为上面的代码工作正常,直到您的预期失败为止,您可能会得到如下错误
上述故障不是很有用。如果我们想利用mocha的错误,我们不应该从相同的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块包装错误。
现在看看mocha的失败消息与实际和预期的不同。结果是mocha很好,我的测试定义也很好,我只是错误地修复了一个完全不同的迁移问题。从版本4开始,当它认为所有的测试都已完成时。这意味着必须使用以下两个选项之一:
--exit
添加到mocha.opts或调用命令的任何位置process.exit()
process.exit()
添加到测试引导文件中的after()
块中这是一个坏主意,导致了上述混乱行为。
为了解决我的问题,我删除了对
after()
块的更改,并将--exit
添加到mocha.opts。感谢Dhruv Choudhary为我指明了正确的方向。事实上,我已经试过了。在mocha中,您要么使用done()函数,要么返回一个承诺,但决不能同时使用这两个函数。它只是抛出了一个错误,但仍然只会导致红色文本,没有详细信息。您是对的,.catch()块可以工作,但是我以前的mocha测试显示了有用的错误消息,而没有添加额外的代码。这在摩卡v5中是否因为某种原因发生了变化?此外,我还试用了您的代码。在我的测试环境中,将错误传递给done()似乎没有任何效果。到目前为止,我发现最好的解决方法是.catch(console.error)代码>我认为它与mocha版本无关(虽然不是很确定,但请查看最新mocha版本中的修复:)。这可能与您处理承诺的方式有关,因为较旧的(2013年之前)承诺库“吞并”了您自己未处理的未处理承诺拒绝。现在不是这样,你必须用catch block来处理它。这个问题页面是一个很大的帮助,谢谢。看来我的麻烦源于添加process.exit()
到摩卡的after()
块,试图在没有的情况下干净地退出--exit
。我想我需要把它放在别的地方。。。