nodejs + jsdom, jQuery странное поведение - PullRequest
3 голосов
/ 28 апреля 2011

Приведенный ниже код представляет собой небольшой фрагмент из моего файла server.js, предназначенный только для запуска теста, предоставленного документацией jsdom.

var window = jsdom.jsdom().createWindow();
jsdom.jQueryify(window, './jq.min.js' , function() {
  console.log('inside');
  window.$('body').append('<div class="testing">Hello World, It works</div>');
  console.log(window.$('.testing').text());
  console.log('end');
});

Я получаю буквально вывод inside, а затем сервер зависает и никогда не возвращается. Я добавил оператор отладки console.log(window);, чтобы увидеть, действительно ли создается объект окна, и в итоге получаю довольно большой выходной оператор, детализирующий содержимое объекта. Однако я заметил одну вещь: выходные данные не показывают, что $ является определенным методом объекта window, и на самом деле console.log(window.$); отображает undefined.

Я понимаю, что jsdom все еще находится в режиме разработки, но я что-то упускаю здесь?

Как фон, я попробовал несколько вариантов кода, включая использование метода jsdom.env(), а также создание документа из существующей разметки HTML, ни один из которых не дал ожидаемых результатов.

1 Ответ

0 голосов
/ 28 апреля 2011

Надеюсь, этот фрагмент кода поможет вам:

createWindow = function(fn) {
    var window  = jsdom.jsdom().createWindow(),
        script = window.document.createElement('script');

    jsdom.jQueryify(window, function() {
        script.src = 'file://' + __dirname + '/some.library.js';
        script.onload = function() {
            if (this.readyState === 'complete') {
                fn(window);
            }
        }
    });
}

createWindow(function(window) {
    // Do your jQuery stuff:
    window.$('body').hide();
});

отсюда

...