【发布时间】:2015-02-18 02:40:27
【问题描述】:
如何在 jasmine 上测试这个模块?
问题是 $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 上搜索此问题的解决方案,但没有给出我正在寻找的答案,因此我实现了自己的一个。
【问题讨论】:
-
回答你自己的问题是允许的,但目前我认为这个问题不清楚并且没那么有用。您能否将其改写为一个清晰、简洁的问题(请参阅How to Ask)?现在,它只不过是一段没有任何解释的代码。
标签: javascript angularjs unit-testing jasmine iife