gpt4 book ai didi

node.js - Mocha 异步测试处理错误

转载 作者:行者123 更新时间:2023-11-28 20:11:33 26 4
gpt4 key购买 nike

我正在尝试使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com