Mocha 不显示失败测试的任何详细信息
Mocha isn't displaying any details for failed tests
我正在将应用程序从 Sails.js v0.12 迁移到 v1.0,其中包括将 mocha 从 ^3.5.0 升级到 ^5.2.0。我认为这是问题的根源,但我似乎找不到解决办法。
以前,当测试失败时,mocha 报告器输出的末尾会有错误摘要:失败的具体断言、文件名、行号、错误消息等。现在,报告器正在将 it 块着色为红色,但未显示其他详细信息。
我试过在 mocha.opts 中更改报告器,它适用于实际的执行输出,但最后没有启用摘要。我错过了什么?
// ./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();
});
});
});
});
您可以使用完成回调。 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() 是一个坏主意,因为上面的代码运行良好,直到你的期望失败,你可能会得到类似的错误
上面的失败不是很有用。如果我们想利用 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 开始,mocha will no longer automatically kill itself 当它认为所有测试都已完成时。这意味着必须使用这两个选项之一:
- 将
--exit
添加到 mocha.opts 或调用命令的任何位置
- 运行
process.exit()
在你的测试套件中 JavaScript
我通过将 process.exit()
添加到测试 bootstrap 文件中的 after()
块来尝试第二个选项。 这是个坏主意,导致了上述令人困惑的行为。
为了解决我的问题,我删除了对 after()
块的更改,并将 --exit
添加到 mocha.opts。感谢 Dhruv Choudhary 为我指明了正确的方向。
我正在将应用程序从 Sails.js v0.12 迁移到 v1.0,其中包括将 mocha 从 ^3.5.0 升级到 ^5.2.0。我认为这是问题的根源,但我似乎找不到解决办法。
以前,当测试失败时,mocha 报告器输出的末尾会有错误摘要:失败的具体断言、文件名、行号、错误消息等。现在,报告器正在将 it 块着色为红色,但未显示其他详细信息。
我试过在 mocha.opts 中更改报告器,它适用于实际的执行输出,但最后没有启用摘要。我错过了什么?
// ./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();
});
});
});
});
您可以使用完成回调。 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() 是一个坏主意,因为上面的代码运行良好,直到你的期望失败,你可能会得到类似的错误
上面的失败不是很有用。如果我们想利用 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 开始,mocha will no longer automatically kill itself 当它认为所有测试都已完成时。这意味着必须使用这两个选项之一:
- 将
--exit
添加到 mocha.opts 或调用命令的任何位置 - 运行
process.exit()
在你的测试套件中 JavaScript
我通过将 process.exit()
添加到测试 bootstrap 文件中的 after()
块来尝试第二个选项。 这是个坏主意,导致了上述令人困惑的行为。
为了解决我的问题,我删除了对 after()
块的更改,并将 --exit
添加到 mocha.opts。感谢 Dhruv Choudhary 为我指明了正确的方向。