用摩卡测试异步瀑布似乎停滞不前
Testing async waterfall with mocha seems to stall
我正在尝试向我拥有的节点模块添加一些 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();
});
})
});
您解决了主要问题,但您的代码仍然存在问题。当你有一个接受回调的异步方法时,你 必须始终在所有情况下只调用一次回调 否则你的程序的控制流将会中断。如果您编写 if/else
子句,则两个分支都必须调用回调函数。您上面的两个 if
语句都违反了回调合同。查看 The Node Way 中的 understanding error-first-callbacks 以获得很好的解释。
我正在尝试向我拥有的节点模块添加一些 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();
});
})
});
您解决了主要问题,但您的代码仍然存在问题。当你有一个接受回调的异步方法时,你 必须始终在所有情况下只调用一次回调 否则你的程序的控制流将会中断。如果您编写 if/else
子句,则两个分支都必须调用回调函数。您上面的两个 if
语句都违反了回调合同。查看 The Node Way 中的 understanding error-first-callbacks 以获得很好的解释。