我有一个令人沮丧的问题。 我正在尝试提取一个在许多类中使用的函数。 这样做会给我带来“完成”回调的问题。 这是我的代码:
我已提取该函数并将其添加到 util.js 中:
var chai = require('chai');
var expect = chai.expect;
var util = exports = module.exports = {};
chai.use(require('chai-http'));
chai.use(require('chai-string'));
util.testAsyncCalls = function testAsyncCalls(urlArray, urlSuffix, result, callback) {
async.each(urlArray, function (url, callback) {
chai.request(url)
.get(urlSuffix)
.then(function (res) {
expect(res).to.have.status(200);
expect(res.body.totalStatus, res.body.summary).to.equalIgnoreCase(result);
callback();
})
.catch(function (err) {
callback(err);
});
});
};
然后,在测试本身中,我调用如下函数:
var config = require(process.env.CONFIG || '../env.json'),
util = require('../util.js');
describe('App', function () {
it('Is /home ok ?', function(done) {
util.testAsyncCalls(config.url.applications, '/home/info', 'SUCCESS', done);
})
});
通过 mocha 运行测试会出现以下错误:
Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
当我对 url 执行正常获取时,我得到了有效响应,因此我认为回调是问题所在。 有人可以帮忙吗?
提前致谢。 问候
最佳答案
您必须在每个末尾调用“全局”回调,请查看 each signature
util.testAsyncCalls = function testAsyncCalls(urlArray, urlSuffix, result, callback) {
async.each(urlArray, function (url, next) {
chai.request(url)
.get(urlSuffix)
.then(function (res) {
expect(res).to.have.status(200);
expect(res.body.totalStatus, res.body.summary).to.equalIgnoreCase(result);
next();
})
.catch(function (err) {
next(err);
});
}, callback);
};
作为一个好的做法,不要在子范围中使用相同的回调名称,例如在每个范围中使用“next”而不是“callback”。
关于javascript - 异步回调不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32221172/