У меня есть приложение angularjs с некоторыми директивами, которые используют компоненты jquery и bootstrap. Итак, чтобы протестировать директивы, я определил следующий порядок файлов в karma.unit.conf.js:
files = [
JASMINE,
JASMINE_ADAPTER,
'app/components/jquery/jquery.js',
'app/scripts/vendor/bootstrap.js',
'app/components/angular/angular.js',
'app/components/angular-mocks/angular-mocks.js',
'app/components/angular-ui/build/angular-ui.js',
'app/scripts/app.js',
'app/scripts/**/*.js',
'test/spec/unit/**/*.js'
];
Если я загружаю сначала angularjs и angular-mocks, а затем jquery и bootstrap, тесты запускаются и завершаются ошибкой, потому что angular использует собственный jQLite. Но если я изменю порядок, как я написал здесь, то я получу следующее:
Редактировать:
Я обнаружил, что это не jQuery вызывает исключение... это bootstrap.js. Если я прокомментирую строку bootstrap.js, тесты запустятся (и не пройдут, как и ожидалось, потому что компоненты начальной загрузки никогда не загружались). Если я загружаю бутстрап, как указано выше (или в любом другом месте перед тестами), то получаю следующее:
PhantomJS 1.8 (Linux) Directive: tkModal should make hidden element visible FAILED[39m
at /home/ir/work/campari/app/components/jquery/jquery.js:1763
at /home/ir/work/campari/app/components/jquery/jquery.js:2833
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
...
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:2850
at /home/ir/work/campari/app/components/jquery/jquery.js:3656
at /home/ir/work/campari/app/components/jquery/jquery.js:648
at /home/ir/work/campari/app/components/jquery/jquery.js:270
at /home/ir/work/campari/app/components/jquery/jquery.js:3657
at /home/ir/work/campari/app/components/jquery/jquery.js:3664
at /home/ir/work/campari/app/components/angular-mocks/angular-mocks.js:1589
at /home/ir/work/campari/app/components/angular-mocks/angular-mocks.js:1627
Строка at /home/ir/work/campari/app/components/jquery/jquery.js:2850
бесконечно повторяется примерно 15 000 раз, прежде чем тест завершится сбоем (похоже, это происходит, когда jQuery пытается выполнить функцию internalData в jquery.js:1763).
Буду признателен за любую идею
Изменить: решено
Нашел ответ, это была проблема с загрузкой в версии 2.3.0, обновление до 2.3.1 решило ее. См. https://github.com/twitter/bootstrap/issues/6835.