Угловой тест Неизвестный поставщик

0

В настоящее время я пытаюсь проверить view1 (home.js), а в view1 я использую фильтры и директивы, которые я переместил с view1_test.js на уровень app.js. Все мои тесты используют, чтобы пройти, и теперь все, что ссылается на фильтры или директивы, теперь терпит неудачу в своих тестах. Мне было интересно, нужно ли мне создавать app_test.js или есть ли способ исправить тесты, которые будут работать? Ниже приведен пример того, о чем я говорю.

app.js

'use strict';

// Declare app level module which depends on views, and components
angular.module('myApp', [
    'ngRoute',
    'myApp.home',
    'ngAnimate',
    'ui.bootstrap',
    'ui.date'
]).
config(['$routeProvider','$httpProvider','$locationProvider', function($routeProvider) {
    $routeProvider.otherwise({redirectTo: '/home'});
}])
.filter('upper', function () {
    return function (input) {
        return input.toUpperCase();
    };
})

view1.js(home.js)

'use strict';

angular.module('myApp.home', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
    $routeProvider.when('/home', {
        templateUrl: 'home/home.html',
        controller: 'HomeCtrl'
    });
}])

view1_test.js(home_test.js)

'use strict';
describe('myApp.home module', function () {
    beforeEach(module('myApp.home'));
}

describe('Filter: upper', function () {
    var upperFilter;

    beforeEach(inject(function (_upperFilter_) {
        upperFilter = _upperFilter_;
    }));

    it('should be able to uppercase an entire input', function () {
        expect(upperFilter('hello')).toBe('HELLO');
        expect(upperFilter('hello world')).toBe('HELLO WORLD');
    });

});

Во время выполнения этого теста. Я получаю это:

Chrome 47.0.2526 (Windows 7 0.0.0) Модуль myApp.home Фильтр: верхний должен иметь возможность загладить весь ввод. FAILED Ошибка: [$ injector: unpr] Неизвестный поставщик: upperFilterProvider <- upperFilter http://errors.angularjs. org/1.4.7/ $ инжектор /unpr? p0 = upperFilterProvider %20% 3C- %20upperFilter при C: /webroot/member_portal/app/bower_components/angular/angular.js: 68: 12 в C: /webroot/member_portal/app/bower_components/angular/angular.js:4289:19 в Object.getService [as get] (C: /webroot/member_portal/app/bower_components/angular/angular.js: 4437: 39) в C: /webroot/member_portal/app/bower_components/angular/angular.js: 4294: 45 at getService (C: /webroot/member_portal/app/bower_components/angular/angular.js: 4437: 39) в Object.invoke(C: /webroot/member_portal/app/bower_components/angular/angular.js:4469:13) в Object.workFn(C: /webroot/member_portal/app/bower_components/angular-mocks/angular-mocks.js: 2438: 20) Ошибка: объявление window.inject.angular.mock.inject(C: /webroot/member_portal/a pp/bower_components/angular-mocks/angular-mocks.js: 2409: 25) в Suite. (C: /webroot/member_portal/app/home/home_test.js: 766: 20) в Suite. (C: /webroot/member_portal/app/home/home_test.js: 763: 5) в C: /webroot/member_portal/app/home/home_test.js: 3: 1 TypeError: upperFilter не является функцией объекта. (C: /webroot/member_portal/app/home/home_test.js: 771: 20) Chrome 47.0.2526 (Windows 7 0.0.0): Выполнено 1 из 54 (1 НЕИСПРАВНО) (пропущено 53) ОШИБКА (0.327 secs/0.005) сек)

Теги:
unit-testing

1 ответ

1
Лучший ответ

Вы объявили 2 разных модуля для каждого файла

app.js -> angular.module('myApp', [...

view1.js -> angular.module('myApp.home', ['ngRoute'])

В вашем home_test.js вы должны вводить модуль myApp вместо myApp.home так как вы перенесли его в этот модуль

  • 0
    Не могли бы вы показать пример. Я попытался изменить beforeEach (module ('myApp.home')); -> beforeEach (module ('myApp')); Также beforeEach (module ('myApp.home')); -> beforeEach (module ('myApp')); beforeEach (module ('myApp.home')); И оба из них привели к ошибке: [$ injector: modulerr] Не удалось создать экземпляр модуля myApp из-за: Ошибка: [$ injector: modulerr] Не удалось создать экземпляр модуля ngAnimate из-за: Ошибка: [$ injector: nomod] Модуль 'ngAnimate' недоступно! Вы либо неправильно написали имя модуля, либо забыли загрузить его.
  • 0
    Эта ошибка появляется из-за зависимостей в модуле myApp . Либо вы высмеиваете эти зависимости, либо изолируете фильтр в другом модуле и просто внедряете этот модуль, либо вы можете включить эти зависимости в свой тест.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню