$ controller не создается в jasmine

0

Этот фрагмент кода дает ошибку при запуске моего тестового примера.

 beforeEach(module(function($scope) {

// do something interesting with the service
//console.log($controller);

}));

Ошибка в консоли.

debug.js:21 Uncaught Error: [$injector:modulerr] Failed to instantiate    
module function ($scope) due to:
Error: [$injector:unpr] Unknown provider: $scope

Может кто-нибудь объяснить, почему он не может найти $ scope. Он также не работает, если я изменю его на $ timeout или $ controller.

Обновленный код Если я изменю код на это

Затем он работает

module(function($controllerProvider) {
// we could also access the $controllerProvider.allowGlobals() function, 
// which allows us to register a controller on the window object.
$controllerProvider.register('ProductsController', function() {
    // logic of the controller...
});
});
Теги:
jasmine

1 ответ

1

Вы смешиваете два разных module функций и inject.

module настраивает среду жасмина для использования указанного углового модуля. Это, вероятно, app. Если вы этого не сделаете, инжектор не сможет найти ваши службы, контроллеры, директивы и т.д. В функции module вы можете вводить поставщиков, а не службы, фабрики и т.д. Вы используете поставщиков для настройки того, как услуги будет вести себя позже.

inject берет функцию, которую вы предоставляете, и "вводит" службы, константы, фабрики и т.д. по имени перед ее вызовом. Вы используете это, чтобы самостоятельно использовать службы и т.д.

Вот пример того, как разделить вызовы в вашем коде. Я также изменил $scope чтобы использовать $rootScope и создать область.

 beforeEach(function() {
    module("app"); //or if your module is name something different, use that name instead

    inject(function($controller, $rootScope) {
        var $scope = $rootScope.$new();
        var myCtrl = $controller("myCtrl", { $scope: $scope });
    }));
});
  • 0
    Есть 3 способа передать аргумент в функции модуля 1. Строка 2. Функция 3. Object Literal.
  • 0
    @ user3045179 все три делают разные вещи. Если вы используете строковый аргумент, он находит модуль с таким именем. Если вы используете функцию, она использует эту функцию для создания нового модуля . Если вы используете объект, он вставляет один модуль для каждого свойства. Вы можете просмотреть документацию для получения дополнительной информации.
Показать ещё 3 комментария

Ещё вопросы

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