我用jasmine(http://jasmine.github.io/2.0/)测试我的angular-application并得到下一个错误: 未知提供者:$ 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');
}));
});
答案 0 :(得分:34)
您需要手动将$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');
...
});
});
});
答案 1 :(得分:1)
通常,仅当控制器连接到DOM时,$ scope才可用作可注入参数。
你需要以某种方式将控制器关联到DOM(我对茉莉花很熟悉)。
答案 2 :(得分:0)
我正在关注egghead的视频教程(link bellow),该教程提出了这种方法:
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