我正在尝试使用Mocha创建一个测试用例,但我的代码是异步的。
没关系,我可以为“它”添加一个“完成”回调函数,对于正面情况,这将完全正常。但是当试图测试否定案例时,它只会使测试失败。
我想做这样的事情但异步:
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:
我尝试失败了:
使用true / false
return (true); // ok
retur (false); // error
使用回调:
callback(); // ok
callback(err); // error
使用callback2:
callback(true); // ok
callback(false); // error
使用callback3:
callback(null); // ok
callback(new Error()); // error
使用throw(也在try / catch块中):
// 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');
答案 0 :(得分:1)
Assuming that someObject.someMethod
adheres to the regular Node.js callback convention (error as first argument, value as second), you could use something like this:
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();
});
});
I inferred from the name of the test case that you want to test for two situations: either the method is "returning" an error, or it's "returning" a value of false
(by calling the callback function with the appropriate arguments).
答案 1 :(得分:0)
您可以在匿名函数中完成换行,并手动处理(err,res)
并使用硬编码输入调用。
或者:
(function(){
throw new Error('fail');
}).should.throw();