теги jsdom и script с относительными путями

У меня есть несколько одностраничных демонстраций, подобных этой: http://notjs.org/examples/forms/formmode_demo.html

Я подумал, вау, было бы супер здорово, если бы я мог написать несколько тестов в моей существующей настройке плохости мокко-чая, чтобы протестировать примеры напрямую, например так:

        example = 'forms/formmode_demo.html'

        describe "examples/#{example}", () ->
          before (done) ->
            loadExample example, () => done()

          it 'should load in full input mode', () ->
            window.$('input').length.should.equal 2

          describe "in full input mode", () ->
            it 'should have visible save', () ->
              window.$('button.success').is(':visible').should.be.true
            it 'should have visible cancel', () ->
              window.$('button.cancel').is(':visible').should.be.true
            it 'should not have put inputs on readonly class elements', ()->
              window.$('.readonly input').length.should.equal 0
            it 'should have input with author name', () ->
              window.$("[data-not_attr='name'] input:text").val().should.equal window.dataObject.name

Если бы я мог это сделать, я бы никогда не страдал от этого смущающего момента «ваш пример x перестал работать несколько месяцев назад».

Я заставил его работать, но только с тегами script на странице, полученной с http://urls. Это не так эффективно для теста, если мне нужно развернуть пакет на сервере перед тестированием.

Страница примера загружает jquery, underscore и notjs и должна работать как отдельная демонстрация. Он также должен иметь возможность работать с относительными URL-адресами из локальной файловой системы. Первоначально у меня был тег сценария notjs на странице, указывающий на относительный путь, например.

    <script src="../../notjs.basics.js"></script>

вместо

    <script src="http://notjs.org/notjs.basics.js"></script>

Но тогда notjs.basics.js никогда не загружается (window.Notjs == undefined в тесте), и я не вижу никакой ошибки от jsdom. Я попытался установить параметр documentRoot jsdom, но это не сработало.

Для справки, метод loadExample и остальная часть моей настройки jsdom находятся здесь: https://github.com/bee-hub/notjs/blob/master/test/testHelper.coffee

Спасибо за любую помощь и предложения.


person Bee Wilkerson    schedule 24.03.2013    source источник


Ответы (1)


Это нигде не задокументировано, но функция testLocal() в test/jsdom/index.js в версии 0.8.4 jsdom предоставляет параметр «url» для jsdom.jsdom(…), который, кажется, выполняет много та же цель, которую вы ожидаете от параметра documentRoot. Используя его, я могу разрешить относительные исходные пути скриптов из HTML-документа в моей локальной файловой системе.

Что бы это ни стоило, «documentRoot» также не упоминается в документации. Его использование неофициально одобрено в выпуске github, так что, возможно, он работал в более ранней версии.

Не забывайте, что jsdom.jsdom(…) будет загружать скрипты асинхронно, поэтому не забудьте привязать свои тесты к событию готовности документа.

Удачи!

person Dave Horlick    schedule 12.09.2013