2015-03-02 8 views
1

Я экспериментирую с Jest, чтобы выполнить тестирование углового приложения. Чтобы проверить угловые привязки, я пытаюсь использовать jsdom (N.B. Я использую v3.1.2, поскольку я использую node not 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...'); 
}); 

Если я запускаю этот тест, тест будет проходить, но «Завершено» сообщение журнала не будет печататься, я могу также замените ожидание на что-то, что явно должно потерпеть неудачу, например expect (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 :) –