2015-03-02 65 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