我是使用angularjs的新手。最近我被要求用Jasmine进行单元测试angularjs控制器,Jasmine是另一个不为人知的框架。我写了几个简单的案例,在WebStorm中一起运行这些东西,但无论我怎么努力,案例总是失败。最让我感到沮丧的是,他们似乎失败的原因与我无法解决的原因相同:(
这是我的代码:
控制器测试:
/*home.js*/
var app = angular.module('Application', ['ngResource']);
app.controller('MainCtrl', function($scope) {
$scope.text = 'Hello World!';
$scope.user = function(){
return {
name:'Robin',
age:32
}
}
});
测试用例:
/*home.tests.js*/
describe('MainCtrl', function(){
var scope;
beforeEach(angular.mock.module('Application'));
// Here $rootScope, $controller are always undefined...so the function quits before scope has been initialized.
beforeEach(angular.mock.inject(function($rootScope, $controller){
scope = $rootScope.$new();
$controller('MainCtrl', {$scope: scope});
}));
it('should have scope defined', function () {
expect(scope).toBeDefined();
});
it('should have variable text = "Hello World!"', function(){
expect(scope.text).toBe('Hello World!');
});
});
karma.conf.js(部分内容)
files: [
'Scripts/jquery-1.10.2.min.js',
'allScripts/angular-1.3.0/angular.min.js',
'allScripts/angular-1.3.0/angular-mocks.js',
'Scripts/wdso/home.js',
'UnitTest/JsTests/home.tests.js',
],
问题似乎是$ injector一直未定义,第二个foreach块永远不会成功运行。
现在这个问题花了我2天时间,让我发疯了。我在网上做了很多搜索,但没有找到任何帮助。有人可以告诉我我的代码有什么问题,比如错过任何引用吗?任何建议都将受到欢迎,非常感谢。谢谢!