Я просто включил ngMock в свой проект, потому что он мне нужен для $httpBackend. У меня есть куча настроек тестов кармы/жасмина, и после включения ngMock все ломается из-за ошибки, которую он вызывает:
PhantomJS 1.9.7 (Windows 7): Executed 0 of 41 SUCCESS (0 secs / 0 secs)
PhantomJS 1.9.7 (Windows 7) ERROR
Error: Unexpected request: GET home/home.html
No more request expected
at C:/dev/app/bower_components/angular-mocks/angular-mocks.js:1181
Кажется, ему не нравится ngRoute/$routeProvider. В частности, он прерывается оператором else/redirectTo. Если я закомментирую этот раздел, тесты кармы/жасмина будут работать без ошибок.
$routeProvider
.when('/home', angularAMD.route({
templateUrl: 'home/home.html',
controller: ''
}))
.otherwise({
redirectTo: '/home'
});
Обратите внимание, я использую angularAMD (для ленивой загрузки), но даже когда я переписываю этот раздел, чтобы использовать только {} без angularAMD.route(), он все равно выдает ту же ошибку. то есть:
$routeProvider
.when('/home', {
templateUrl: 'home/home.html',
controller: ''
})
.otherwise({
redirectTo: '/home'
});
Есть идеи, почему ngMock не любит ngRoute? На данный момент я создал обходной путь, в котором я пропускаю раздел $routeProvider при выполнении тестов кармы/жасмина. Но я пытаюсь понять, что происходит, не должен ли я вообще устанавливать $routeProvider во время модульного тестирования (это плохая практика)?
[Изменить:] Проблемы возникают и в других сегментах. Я запускаю тест, который включает службу, загружающую шаблон, и также выдает ошибку:
Error: Unexpected request: GET components/modal/modal.html
No more request expected
at $httpBackend (C:/dev/app/bower_components/angular-mocks/angular-mocks.js:1181)
[Изменить:] Кажется, выдает ошибку, когда я звоню $httpBackend.flush();
[Изменить:] Отлично, найдены сообщения, связанные с проблемой. Не могу поверить, что Google не показал никаких релевантных результатов, когда я искал. Решение. Если вы попали сюда из результатов Google, взгляните на это: сообщение 1. , сообщение 2.
[Изменить:] Не удалось заставить ни одно из этих решений работать с angularAMD. Какие-либо предложения?
$httpBackend.whenGET(/\.html$/g).respond("");
И в своих тестах я использую отдельный файлapp.js
для начальной загрузки приложения, которое не объявляет никакой конфигурации $routeProvider. - person BuildTester1   schedule 26.02.2015