Этот фрагмент кода дает ошибку при запуске моего тестового примера.
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...
});
});
Вы смешиваете два разных 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 });
}));
});