首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jsdom和Jest

使用jsdom和Jest
EN

Stack Overflow用户
提问于 2015-03-02 14:32:40
回答 2查看 5.4K关注 0票数 2

我正在试验Jest来单元测试一个角度的应用程序。为了测试角度绑定,我尝试使用jsdom (N.B。我使用v3.1.2,因为我使用的是节点而不是IO)。当我需要用html加载脚本时,测试似乎是在加载脚本之前完成的。

我已经将我的测试用例简化为使用来自jsdom的示例:

代码语言:javascript
复制
it('updates the view without error', function(){
    var jsdom = require('../../../../node_modules/jsdom/lib/jsdom');

    jsdom.env(
      '<p><a class="the-link" href="https://github.com/tmpvar/jsdom">jsdom!</a></p>',
      ["http://code.jquery.com/jquery.js"],
      function (errors, window) {
        //console.log("contents of a.the-link:", window.$("a.the-link").text());
        console.log("Completed");
        expect(errors).toBeNull();
      }
    );

    console.log('exiting...');
});

如果我运行这个测试,测试将通过,但是“已完成的”日志消息将不会被打印出来,我也可以用一些明显失败的东西替换expect,比如expect(false).toBeTruthy(),并且测试仍然会“通过”。如果我删除了jquery的注入,那么所有这些都可以正常工作。

在退出测试之前,如何确保加载了脚本?更广泛地说,在Jest中显式地使用jsdom感觉有点不对。有更好的办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-02 14:52:44

因为.env可能是异步的,所以在调用回调之前总是存在测试。

根据jest教程,您可以简单地将HTML分配给document.body.innerHTML

代码语言:javascript
复制
// Set up our document body
document.body.innerHTML =
    '<div>' +
    ' <span id="username" />' +
    ' <button id="button" />' +
    '</div>';
var $ = require('jquery');

或者,您可以使用而不是it,并从函数返回一个承诺。

票数 5
EN

Stack Overflow用户

发布于 2018-06-25 16:24:59

我认为测试异步代码的最好方法是通过“完成”回调,正如文档中所解释的那样。然后,您的代码将变成:

代码语言:javascript
复制
it('updates the view without error', function(done){
    var jsdom = require('../../../../node_modules/jsdom/lib/jsdom');

    jsdom.env(
      '<p><a class="the-link" href="https://github.com/tmpvar/jsdom">jsdom!</a></p>',
      ["http://code.jquery.com/jquery.js"],
      function (errors, window) {
        //console.log("contents of a.the-link:", window.$("a.the-link").text());
        console.log("Completed");
        expect(errors).toBeNull();
        done();
      }
    );

    console.log('exiting...');
});

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

https://stackoverflow.com/questions/28812307

复制
相关文章

相似问题

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