Javascript JSDOM函数未完成
请帮助我理解这里的错误: 以下是我的js代码(简化为隔离演示问题所需的最少代码): 这是我的命令行: node_modules/mocha/bin/mocha tests/test.js 当我运行上述脚本时,我得到以下输出:Javascript JSDOM函数未完成,javascript,asynchronous,mocha.js,jsdom,Javascript,Asynchronous,Mocha.js,Jsdom,请帮助我理解这里的错误: 以下是我的js代码(简化为隔离演示问题所需的最少代码): 这是我的命令行: node_modules/mocha/bin/mocha tests/test.js 当我运行上述脚本时,我得到以下输出: desc ✓ should (196ms) 1 passing (204ms) 删除jsdom部分并仅运行uploadURL()中包含console.log和callback的部分后,我得到以下信息: desc inside returned abc
desc
✓ should (196ms)
1 passing (204ms)
删除jsdom部分并仅运行uploadURL()中包含console.log和callback的部分后,我得到以下信息:
desc
inside
returned abc
✓ should
1 passing (5ms)
在脚本结束之前,似乎没有执行jsdom部分。
这是为什么?如何解决
谢谢大家! 因为它是异步的。要使用Mocha测试异步函数,您可以接受Mocha的
回调,它提供了回调,并在异步完成时调用它:
'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
});
});
});
“严格使用”;
var jsdom=require('jsdom');
描述('desc',函数(){
它('should',函数(done){
//^------------------接受回调
函数上载URL(回调){
jsdom.env({
url:“http://digg.com",
完成:函数(错误,窗口){
控制台日志(“内部”);
回拨(“abc”);
}
});
}
上传URL(函数(x){
console.log(“返回”+x);
done();//谢谢您的回复。很遗憾,我在尝试您的建议时遇到以下错误:错误:超过2000毫秒的超时时间。请确保完成()此测试中正在调用回调。@Katya:听起来查询digg.com并分析结果需要2秒以上的时间。我希望某个地方有一个配置参数可以让您延长超时时间。宾果!:)添加回调并设置“this.timeout(10000);”在“descripe”和“it”之间解决了这个问题。非常感谢!@Katya:Good deal.:-)如果这回答了您的问题,堆栈溢出的工作方式是这样的,您可以通过单击旁边的复选标记来“接受”答案,从而将其从未回答问题列表中删除。
'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
});
});
});