【发布时间】:2014-02-10 16:58:10
【问题描述】:
我正在使用 jasmin 用以下代码测试我的 AngularJs 项目
controllersSpec.js
describe('myApp', function(){
beforeEach(angular.mock.module('myApp'));
it('should have a mailctrl', function() {
expect(myApp.mailctrl).toBeDefined();
});
});
controller.js
var myApp = angular.module('myApp', []);
myApp.controller('mailctrl', ['$scope', '$routeParams', '$rootScope', 'getMailData', '$angularCacheFactory',
function ($scope, $routeParams, $rootScope, getMailData, $angularCacheFactory) {
##....controller content....##
}
]);
SpecRunner.html
<script type="text/javascript" src="../lib/angular/angular.min.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>
<script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>
<script type="text/javascript" src="../test/lib/angular/angular-mocks.js"></script>
<script src="../js/controller.js"></script>
<script src="../test/unit/controllersSpec.js"></script>
现在,当我在浏览器中打开 Specrunner.html 时,出现以下错误
Expected undefined to be defined.
我对上述问题有以下疑问
1) 我哪里出错了?
2) 如何使用控制器的 $rootScope 变量?
3) beforeEach(angular.mock.module('myApp')); 和 beforeEach(angular.module('myApp')); 和 有什么区别>beforeEach(module('myApp'));
编辑:
我已将代码修改为
describe('myApp', function(){
beforeEach(angular.mock.module('myApp'));
it('should have a mailctrl', inject(function($rootScope, $controller) {
var controller = $controller('mailctrl', { $scope: $rootScope.$new(), $rootScope: $rootScope });
expect(controller).toBeDefined();
}));
并出现以下错误 -
错误:[$injector:unpr] http://errors.angularjs.org/undefined/$injector/unpr?p0=%24routeParamsProvider%20%3C-%20%24routeParams
如果我在 $controller() 中添加其他参数(即 '$routeParams'、'getMailData'),则会出现错误,因为它们未定义。
【问题讨论】: