ngMock выдает ошибку загрузки шаблона из-за ngRoute $ routeProvider?

Я просто включил 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. Какие-либо предложения?


person BuildTester1    schedule 04.11.2014    source источник
comment
Вы уже нашли решение? Имея точно такую ​​же проблему!   -  person stianlp    schedule 23.02.2015
comment
@stianlip да, вам нужно настроить все, чтобы направить все неразрешенные шаблоны: $httpBackend.whenGET(/\.html$/g).respond(""); И в своих тестах я использую отдельный файл app.js для начальной загрузки приложения, которое не объявляет никакой конфигурации $routeProvider.   -  person BuildTester1    schedule 26.02.2015


Ответы (1)


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

В моем файле User.tests.js у меня было

 beforeEach(module('App.services'));

В моем файле app.js у меня было:

  App = angular.module("App", [
    "ngRoute"
    "App.templates"
    "App.filters"
    "App.services"
    "App.controllers"
    "App.directives"
    "ui.bootstrap"
  ]);

В моем сервисе User.js я фактически использовал $route. Решение для меня состояло в том, чтобы переключить мой User.tests.js на использование фиктивного модуля "App" - beforeEach(module("App")); таким образом тесты загружают все правильные зависимости.

person Blaskovicz    schedule 17.03.2015