我如何在茉莉花上测试这个模块?问题是测试 $controller
非常困难,因为函数隐藏在闭包内,测试它们非常困难 .
换句话说,给定下面的模块定义,为MainCtrl编写单元测试似乎是不可能的 .
(function () {
'use strict';
angular.module('app', []);
function MainCtrl() {
var mc = this;
mc.obj = {
val : 50
};
}
angular.module('app').controller('MainCtrl', MainCtrl);
} () );
和“典型的”茉莉花测试
describe('app', function(){
beforeEach(module('app'));
it('should create an objet with val 50', inject(function(_$controller_) {
var scope = {},
ctrl = _$controller_('MainCtrl', {$scope:scope});
expect(scope.obj.val).toBe(50); // returns Expected undefined to be 50.
}));
});
当angular在jasmine测试函数中注入 _$controller_
服务时,创建的控制器实例返回一个未定义的$ scope .
那你怎么测试呢?
我在StackOverflow上搜索这个问题的解决方案,没有给我我想要的答案所以我实现了我自己的一个 .
2 回答
它可以通过以下方式使用茉莉花进行测试:
这是一个jsfiddle
希望能帮助到你 !
问题出在这里
var scope = {}, ctrl = _$controller_('MainCtrl', {$scope:scope});
您正在导入未定义的范围 . 你需要做这样的事情:
注入
$rootScope
:inject(function (_$controller_, _$rootScope_)
构建新范围:
var scope = $rootScope.$new();
构建控制器:
var ctrl = _$controller_('MainCtrl', {$scope: scope});