我正在尝试向我所拥有的节点模块添加一些mocha测试,但我是新手,而且我在回调方面缺乏具体性,这阻碍了我。 我试图将事情简化为最简单的例子,但它仍然没有用。
所以我的main.js
是
var async = require('async');
var myObject = {};
myObject.test = function(params) {
async.waterfall([
async.apply(test, params)
],
function(err, result){
if (err) {
console.log('Error: ' + err);
} else {
if (result === 200) {
return result;
}
}
});
};
function test(params, callback) {
if(params) {
callback(null, 200);
}
}
module.exports = myObject;
然后我的测试文件
var assert = require("assert");
var myObject = require('./main');
describe('test', function(){
it("should return 200", function(done){
myObject.test({test: 'such test'}, function(err, res) {
if (err) return done(err);
assert.equal(res, 200);
done(res);
});
})
});
如果我只是运行mocha
它会超时,所以我对此表示怀疑!尝试mocha --timeout 15000
也只是停滞不前。你能提供的任何方向都会非常感激!
我使用this answer做到了这一点,但无法继续下去。
好吧,我认为我对它进行了排序,但仍然会感谢一些反馈,看看我是否正确接近它,而不是仅仅让我的测试通过。
var async = require('async');
var myObject = {};
myObject.test = function(params, callback) {
async.waterfall([
async.apply(test, params)
],
function(err, result){
if (err) {
console.log('Error: ' + err);
} else {
if (result === 200) {
callback(result);
}
}
});
};
function test(params, callback) {
if(params) {
callback(null, 200);
}
}
module.exports = myObject;
,测试文件是
var assert = require(“assert”); var myObject = require('./ main');
describe('test', function(){
it("should return 200", function(done){
myObject.test({test: 'such test'}, function(res) {
assert.equal(res, 200);
done();
});
})
});
答案 0 :(得分:1)
您修复了主要问题,但您的代码仍然存在问题。当你有一个采用回调的异步方法时,必须始终在所有情况下完全调用一次回调,否则你的程序的控制流将会中断。如果编写if/else
子句,则两个分支都必须调用回调函数。上述两个if
语句都违反了回调合同。查看The Node Way中的understanding error-first-callbacks以获得更好的解释。