Mocha 异步测试处理错误
Mocha async test handle errors
我正在尝试使用 Mocha 创建测试用例,但我的代码是异步的。
没关系,我可以向 "it" 添加一个 "done" 回调函数,这对于肯定的情况非常有效。但是当尝试测试负面案例时,它只会使测试失败。
我想做这样的东西但是异步的:
someObject.someMethod(null).should.equal(false)
相反,我只能测试 return 的回调,而不是测试真正发生的事情(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
使用回调2:
callback(true); // ok
callback(false); // error
使用回调 3:
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);
我也尝试了几种组合,例如 returning 和调用回调,returning 成功但抛出或调用回调错误,相反..
编辑#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');
您可以将 done 包装在匿名函数中,然后手动处理 (err,res)
并使用硬编码输入调用 done。
或者:
(function(){
throw new Error('fail');
}).should.throw();
假设 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();
});
});
我从测试用例的名称推断出您要测试两种情况:方法是 "returning" 错误,或者是 "returning" false
的值(通过使用适当的参数调用回调函数)。
我正在尝试使用 Mocha 创建测试用例,但我的代码是异步的。
没关系,我可以向 "it" 添加一个 "done" 回调函数,这对于肯定的情况非常有效。但是当尝试测试负面案例时,它只会使测试失败。
我想做这样的东西但是异步的:
someObject.someMethod(null).should.equal(false)
相反,我只能测试 return 的回调,而不是测试真正发生的事情(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
使用回调2:
callback(true); // ok
callback(false); // error
使用回调 3:
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);
我也尝试了几种组合,例如 returning 和调用回调,returning 成功但抛出或调用回调错误,相反..
编辑#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');
您可以将 done 包装在匿名函数中,然后手动处理 (err,res)
并使用硬编码输入调用 done。
或者:
(function(){
throw new Error('fail');
}).should.throw();
假设 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();
});
});
我从测试用例的名称推断出您要测试两种情况:方法是 "returning" 错误,或者是 "returning" false
的值(通过使用适当的参数调用回调函数)。