Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSDOM函数未完成_Javascript_Asynchronous_Mocha.js_Jsdom - Fatal编程技术网

Javascript JSDOM函数未完成

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

请帮助我理解这里的错误:

以下是我的js代码(简化为隔离演示问题所需的最少代码):

这是我的命令行:

node_modules/mocha/bin/mocha tests/test.js

当我运行上述脚本时,我得到以下输出:

  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
        });
    });
});