【发布时间】:2016-06-15 09:30:53
【问题描述】:
我在单元测试代码中遇到了一些问题,该代码使用了一个使用 child_process exec 的模块。当我创建一个在 exec 调用内部或之后使用断言的单元测试时,Mocha 无法正常工作。当触发断言时,Mocha 将继续运行,直到达到给定的超时。当断言没有被触发时,一切都会正常工作。
例如,在这个测试用例中,Mocha 将一直运行到超时:
it('someTest', function (done) {
var exec = require('child_process').exec;
exec('ping 8.8.8.8', () => {
assert.deepEqual(1, 2, 'test');
done();
});
});
那么当断言在 exec 之外时仍然会产生同样的问题:
it('someTest2', function (done) {
var exec = require('child_process').exec;
var promise = new Promise((promiseDone) => {
exec('ping 8.8.8.8', () => {
var success = 1 === 2;
promiseDone(success, '1 has to be 2');
});
});
promise.then((success, message) => {
assert.deepEqual(success, true, message); // Assert stops the test but Mocha does not stop
done();
});
});
解决此问题的方法是创建一个 before 语句,在其中执行使用 exec 的方法并保存结果,然后创建一个 it();用断言检查这些结果的块。
感觉这不是一个合适的解决方案。使用这种方法,您可以在 before 语句中进行单元测试,然后在 it() 中检查结果;堵塞。那是不对的。
一个例子:
var success = true;
before(function (done) {
this.timeout(10000);
var exec = require('child_process').exec;
exec('ping 8.8.8.8', () => {
success = 1 === 2;
done();
});
});
it('someTest1', function (done) {
assert.deepEqual(success, true, 'test');
done();
});
【问题讨论】:
标签: javascript node.js windows unit-testing mocha.js