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 Нет необходимости указывать версию браузера.