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

标签 node.js unit-testing testing mocha.js should.js

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

相关文章:

testing - VueJS 自动化 - Test Cafe 与 Nightwatch - 优点/缺点

node.js - Jade 意外 token "indent"

javascript - Node.js:使用 CoffeeScript 创建 Express 项目

PHPUnit 和域异常测试

testing - 自定义 TestNG 可通过电子邮件发送的报告的摘要部分

django - 如何在django测试中使用默认数据库

javascript - 获取Promise内单个函数的返回值

node.js - 如何在node.js、mongoose 中使用填充数据?

javascript - Jasmine 中 NUnit 的 TestCaseSource 是否有相应的设置?

python - 在 SQLAlchemy 应用程序的单元测试中使用 Alembic?