我正在将一个应用程序从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
});
});
});
});
答案 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()是一个坏主意,因为上面的代码可以很好地工作,直到您的期望失败,您可能会遇到类似
上述故障不是很有用。如果我们想利用摩卡咖啡的错误,我们不应该从相同的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开始,它认为所有测试都已完成。这意味着必须使用以下两个选项之一:
--exit
添加到mocha.opts或命令被调用的任何地方process.exit()
我通过在测试引导文件的process.exit()
块中添加after()
来尝试第二种选择。 这是个坏主意,导致上面的行为令人困惑。
为解决我的问题,我删除了对after()
块的更改,并将--exit
添加到mocha.opts。感谢Dhruv Choudhary为我指出了正确的方向。