nodejs + jsdom, странное поведение jQuery

Приведенный ниже код — это всего лишь небольшой фрагмент из моего файла 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-разметки, но ни один из них не дал ожидаемых результатов.


person jerluc    schedule 28.04.2011    source источник


Ответы (1)


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

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();
});

отсюда

person Edgar Villegas Alvarado    schedule 28.04.2011