我有Angular JS
directive
,其controller
controller
内部调用了多个services
。如何使用Karma
对此进行测试。
这是我的代码结构,
在我的directive
我正在显示service
内部从controller
获取数据的数据。如下所示。
<div class='tile'>
<div class="count">{{tileRegistry.tileData.tileCount}}</div>
</div>
这里tileRegistry从控制器服务获取数据,如下所示
var commonController = ['$scope','$filter','tileSvc','navSvc','appSetting', function ($scope,$filter, tileSvc,navSvc,applSettig) {
function commonController() {
var tileType = $scope.tile.id;
$scope.tileRegistry=tileSvc.getRegistry(tileType);
$scope.limit=6;
}
commonController();
$scope.link = function(){
var url = $scope.tile.uriLink;
applSetting.setpatientListActive(false);
navSvc.navigateToSegment(url, {});
};
}];
angular module('app').service('tileSvc',['pblmSvc','procSvc','allgSvc', function(pblmSvc,procSvc,allgSvc){ this.getRegistry = function(tileType){ switch(tileType){ case 'ALG': return allgSvc.registry; break; case 'PROB: return pblmSvc.registry; break; default: return null; } }; }]);
请有人告诉我如何模拟这个控制器和服务以测试我的指令。
由于
答案 0 :(得分:0)
将mock json对象传递给$ controller()并覆盖必要的服务调用:
beforeEach(function () {
module('you_app_module');
var $scope;
inject(function ($injector, $controller, $rootScope, $filter) {
$scope = $rootScope.$new();
var tileSvcMock = {
getRegistry: function (tileType) {
return "some mock data";
}
};
var navSvcMock = {
navigateToSegment: function (param1, param2) {
return "some mock data";
}
};
var appSettingMock = {
};
$controller(commonController,
{
$scope: $scope,
$filter: $filter,
tileSvc: tileSvcMock,
navSvc: navSvcMock,
appSetting: appSettingMock
});
});
});