$ scopeProvider <- $scope/Неизвестный поставщик
Я тестирую свое приложение angular с жасмином (http://jasmine.github.io/2.0/) и получая следующую ошибку:
Неизвестный поставщик: $scopeProvider < - $scope
Я знаю, что неправильно создавать зависимость с областью действия в фильтрах, службах, фабриках и т.д., Но я использую $scope в контроллере!
Почему я получаю эту ошибку? контроллер выглядит как
testModule.controller('TestCont', ['$filter', '$scope', function($filter, $scope){
var doPrivateShit = function(){
console.log(10);
};
this.lol = function(){
doPrivateShit();
};
this.add = function(a, b){
return a+b;
};
this.upper = function(a){
return $filter('uppercase')(a);
}
$scope.a = this.add(1,2);
$scope.test = 10;
$scope.search = {
};
}]);
и мой тестовый код:
'use strict';
describe('testModule module', function(){
beforeEach(function(){
module('testModule');
});
it('should uppercase correctly', inject(function($controller){
var testCont = $controller('TestCont');
expect(testCont.upper('lol')).toEqual('LOL');
expect(testCont.upper('jumpEr')).toEqual('JUMPER');
expect(testCont.upper('123azaza')).toEqual('123AZAZA');
expect(testCont.upper('111')).toEqual('111');
}));
});
Ответы
Ответ 1
Вам необходимо вручную передать $scope
в контроллер:
describe('testModule module', function() {
beforeEach(module('testModule'));
describe('test controller', function() {
var scope, testCont;
beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new();
testCont = $controller('TestCont', {$scope: scope});
}));
it('should uppercase correctly', function() {
expect(testCont.upper('lol')).toEqual('LOL');
expect(testCont.upper('jumpEr')).toEqual('JUMPER');
...
});
});
});
Ответ 2
Обычно область $scope будет доступна как параметр для инъекций только тогда, когда контроллер подключен к DOM.
Вам нужно каким-то образом связать контроллер с DOM (я вообще знаком с жасмином).
Ответ 3
Я следую видеоуроку из egghead (ссылка ниже), которые предлагают такой подход:
describe("hello world", function () {
var appCtrl;
beforeEach(module("app"))
beforeEach(inject(function ($controller) {
appCtrl = $controller("AppCtrl");
}))
describe("AppCtrl", function () {
it("should have a message of hello", function () {
expect(appCtrl.message).toBe("Hello")
})
})
})
Контроллер:
var app = angular.module("app", []);
app.controller("AppCtrl", function () {
this.message = "Hello";
});
Я отправляю его, потому что в выбранном ответе мы создаем новую область. Это означает, что мы не можем проверять объем видимости контроллера, не?
ссылка на видеоурок (1 мин):
https://egghead.io/lessons/angularjs-testing-a-controller