我正在尝试使用 Mocha 创建测试用例,但我的代码是异步的。
没关系,我可以向“it”添加一个“done”回调函数,这对于肯定的情况非常有效。但是当尝试测试负面案例时,它只会使测试失败。
我想做这样的东西但是异步的:
someObject.someMethod(null).should.equal(false)
相反,我只能测试回调返回,而不是测试真正发生的事情(null 无效):
it('this should return false or an error', function(done) {
someObject.someMethod(null, '', done);
});
我想写这样的东西:
it('this should return false or an error', function(done) {
someObject.someMethod(null, '', done).should.throw();
});
但这会导致这个错误:
"TypeError: Cannot read property 'should' of undefined"
我也尝试过使用 expect 和 assert,但适用相同的规则。
有什么线索吗? 谢谢
编辑#1:
我试过没有成功:
使用真/假
return (true); // ok
retur (false); // error
使用回调:
callback(); // ok
callback(err); // error
使用回调2:
callback(true); // ok
callback(false); // error
使用回调3:
callback(null); // ok
callback(new Error()); // error
使用 throw(也在 try/catch block 内):
// a
throw new Error();
callback();
// b
throw new Error();
callback(new Error());
// c
throw new Error();
callback(false);
我还尝试了几种组合,例如返回并调用回调、成功返回但出错时抛出或调用回调以及相反......
编辑#2:
it('should throw', function(done) {
(function(done) {
someObject.someMethod(null, '', done)
}).should.throw();
});`
编辑#3:
在测试端结束:
it('this should return false or an error', function(done) {
someObject.someMethod(null, function(err, value) {
expect(value === false || err instanceof Error).toEqual(true);
return done();
});
});
在代码端:function(var, callback)
...
callback(new Error('your comments'), false);
// or
callback(new Error('your comments'));
...
// if successful:
callback();
// or
callback(null);
// or
callback(null, 'foo');
最佳答案
假设 someObject.someMethod
遵守常规的 Node.js 回调约定(错误作为第一个参数,值作为第二个参数),您可以使用如下内容:
it('this should return false or an error', function(done) {
someObject.someMethod(null, '', function(err, value) {
(err instanceof Error || value === false).should.equal(true);
return done();
});
});
我从测试用例的名称推断出您要针对两种情况进行测试:方法“返回”错误,或者“返回”值 false
(通过调用具有适当参数的回调函数)。
关于node.js - Mocha 异步测试处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31747081/