请帮助我理解这里有什么问题:
下面是我的js代码(简化为隔离演示问题所需的最小代码):
'use strict';
var jsdom = require('jsdom');
describe('desc', function () {
it('should', function () {
function uploadURL(callback) {
jsdom.env({
url: "http://digg.com",
done: function (errors, window) {
console.log("inside");
callback("abc");
}
});
}
uploadURL(function(x){
console.log("returned " + x);
});
});
});这是我的命令行:
节点_模块/mocha/bin/mocha测试/test.js
当我运行上面的脚本时,我得到了以下输出:
desc
✓ should (196ms)
1 passing (204ms)一旦我移除jsdom部分并只运行包含console.log和回调的console.log()部分,就会得到如下结果:
desc
inside
returned abc
✓ should
1 passing (5ms)似乎在脚本结束之前不会执行jsdom部分。这是为什么,如何解决呢?
谢谢!
发布于 2015-12-28 14:23:52
因为它是异步的。要用Mocha测试异步函数,您可以接受回调Mocha提供的it,并在异步完成时调用它:
'use strict';
var jsdom = require('jsdom');
describe('desc', function () {
it('should', function (done) {
// ^---------------------- accept the callback
function uploadURL(callback) {
jsdom.env({
url: "http://digg.com",
done: function (errors, window) {
console.log("inside");
callback("abc");
}
});
}
uploadURL(function(x){
console.log("returned " + x);
done(); // <=== Call it
});
});
});这在Mocha文档这里中有介绍。
https://stackoverflow.com/questions/34495201
复制相似问题