首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSDOM函数未完成

JSDOM函数未完成
EN

Stack Overflow用户
提问于 2015-12-28 14:17:39
回答 1查看 468关注 0票数 2

请帮助我理解这里有什么问题:

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

代码语言:javascript
复制
'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

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

代码语言:javascript
复制
  desc
    ✓ should (196ms)
  1 passing (204ms)

一旦我移除jsdom部分并只运行包含console.log和回调的console.log()部分,就会得到如下结果:

代码语言:javascript
复制
desc
inside
returned abc
    ✓ should
  1 passing (5ms)

似乎在脚本结束之前不会执行jsdom部分。这是为什么,如何解决呢?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-28 14:23:52

因为它是异步的。要用Mocha测试异步函数,您可以接受回调Mocha提供的it,并在异步完成时调用它:

代码语言:javascript
复制
'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文档这里中有介绍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34495201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档