JSDOM 函数未完成
JSDOM function does not finish
请帮助我了解这里出了什么问题:
这是我的 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);
});
});
});
这是我的命令行:
node_modules/mocha/bin/mocha tests/test.js
当我运行上面的脚本时,我得到以下输出:
desc
✓ should (196ms)
1 passing (204ms)
一旦我删除了 jsdom 部分和 运行 只有包含 console.log 和回调的 uploadURL() 部分,我得到了这个:
desc
inside
returned abc
✓ should
1 passing (5ms)
jsdom 部分似乎没有在脚本结束前执行。
为什么会这样,如何解决?
谢谢!
因为它是异步的。要使用 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 文档中对此进行了介绍here。
请帮助我了解这里出了什么问题:
这是我的 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);
});
});
});
这是我的命令行:
node_modules/mocha/bin/mocha tests/test.js
当我运行上面的脚本时,我得到以下输出:
desc
✓ should (196ms)
1 passing (204ms)
一旦我删除了 jsdom 部分和 运行 只有包含 console.log 和回调的 uploadURL() 部分,我得到了这个:
desc
inside
returned abc
✓ should
1 passing (5ms)
jsdom 部分似乎没有在脚本结束前执行。 为什么会这样,如何解决?
谢谢!
因为它是异步的。要使用 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 文档中对此进行了介绍here。