2015-03-02 124 views
1

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

我已经简化我的测试情况下,使用来自jsdom一个例子:

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

如果我运行这个测试,测试将通过,但“已完成”日志消息不会被打印出来,我还可以用期望值(false).toBeTruthy()替换期望值,并且测试仍然会“通过”。如果我删除jquery的注入,然后按预期工作。

我应该如何确保脚本在我退出测试之前被加载? 更一般地说,明确地使用jsdom和Jest会感觉有点不对。有没有更好的办法?

回答

3

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

按照jest tutorial,你可以简单的HTML分配给document.body.innerHTML

// Set up our document body 
document.body.innerHTML = 
    '<div>' + 
    ' <span id="username" />' + 
    ' <button id="button" />' + 
    '</div>'; 
var $ = require('jquery'); 

另外,您可以使用pit代替it和从函数返回一个承诺。

+2

谢谢。很高兴有一个礼貌版本的RTFM :) – 2015-03-02 20:30:00