angular-mock.js конфликтует с htmlunit? Как проверить угловое приложение, используя angular-mock.js в maven-jasmine

Я новичок в maven и jasmine, и у меня проблема с настройкой maven для запуска модульных тестов в угловых приложениях. У меня возникают проблемы, как только я добавляю angular-mocks.js в папку test/javascript/lib.

mvn test бросает htmlunit.ScriptException просто добавив файл angular-mocks. Если я удалю файл, он будет работать нормально (конечно, без частей, основанных на насмешках, но они не пройдут как юнит-тест, а не приведут к ошибке).

Кто-нибудь знает, что может вызвать эту ошибку и как ее исправить?


РЕДАКТИРОВАТЬ
Я сильно подозреваю, что это проблема htmlunit, потому что ошибка меняется при изменении <browserVersion>:

ХРОМ дает:

TypeError: Невозможно найти функцию attachEvent в объекте [объект HTMLDocument]. (http://localhost:55408/src/lib/angular.js#1568)

FIREFOX_3_6 дает:

Исключение, вызывающее Node.removeEventListener() с аргументами [String, NativeArray, Boolean]

INTERNET_EXPLORER_9 дает:

Исключение, вызывающее Node.detachEvent() с аргументами [String, NativeArray]


Трассировка стека (отрывок FF):

[ERROR] Failed to execute goal com.github.searls:jasmine-maven-plugin:1.3.1.2:test (default) on project my-jasmine-project: The jasmine-maven-plugin encountered an exception:
[ERROR] java.lang.RuntimeException: org.openqa.selenium.WebDriverException: com.gargoylesoftware.htmlunit.ScriptException: Exception invoking Node.removeEventListener() with arguments [String, NativeArray, Boolean]
[ERROR] Build info: version: '2.32.0', revision: '6c40c187d01409a5dc3b7f8251859150c8af0bcb', time: '2013-04-09 10:39:28'
[ERROR] System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.4', java.version: '1.6.0_51'
[ERROR] Driver info: driver.version: HtmlUnitDriver
[ERROR] at com.github.searls.jasmine.runner.SpecRunnerExecutor.execute(SpecRunnerExecutor.java:39)
...

pom.xml (выдержка):

<plugin>
  <groupId>com.github.searls</groupId>
  <artifactId>jasmine-maven-plugin</artifactId>
  <version>1.3.1.2</version>
  <configuration>
    <preloadSources>
      <source>lib/angular.js</source>
      <!-- <source>lib/angular-mocks.js</source> -->
      <source>http://code.angularjs.org/1.1.5/angular-mocks.js</source>
    </preloadSources>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>test</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Как добавление angular-mocks.js в папку test/javascript/lib, так и обращение к нему напрямую с веб-сайта angularjs приводят к одной и той же ошибке.

1 ответ

Решение

В версии браузера CHROME ошибка возникает, когда angular пытается загрузить JQLite совместимое с API подмножество библиотеки jQuery, которое позволяет angular манипулировать DOM. Я смог решить эту проблему, загрузив несжатые версии jQuery (v1.10.2), angular (v1.0.7) и angular-mocks (v1.0.7). Я добавил следующее в конфигурацию в плагине jasmine-maven-plugin.

<preloadSources>
  <preloadSource>${angular-test-deps}/jQuery.js</preloadSource>
  <preloadSource>${angular-test-deps}/angular.js</preloadSource>
  <preloadSource>${angular-test-deps}/angular-mocks.js</preloadSource>
</preloadSources>

В угловой документации говорится, что "Реальный jQuery всегда имеет приоритет над jqLite, если он был загружен раньше". DOMContentLoaded событие сработало " (строка 1448 несжатого 1.0.7). Это исправление по-прежнему не работает с версией браузера CHROME, но работает с FIREFOX_3_6, FIREFOX_17, INTERNET_EXPLORER_9, INTERNET_EXPLORER_8 и INTERNET_EXPLORER_7. Плагин jasmine-maven-plugin_ по умолчанию равен 66, так что FIRE_ ПОЛЬЗУЮТ ПОЛЬЗОВАТЕЛЬ_6, по-умолчанию, FIRE_6 существует по умолчанию, так что FIRE_6 существует по умолчанию, так что FIRE_6 существует по отношению к FIRE_6, так как имеется FIRE6, так что имеется FIRE6, так что есть здесь FIRE Нет необходимости указывать версию браузера.

Другие вопросы по тегам