具有指令的单元测试表单模板返回"错误:[$ injector:unpr]未知提供者:"

时间:2016-08-08 03:08:26

标签: angularjs gulp-karma ng-html2js

我正在通过表单验证创建单元测试表单。 在我的主窗体模板控制器中,我正在模拟注入的服务。 表单模板还包含一个注入相同服务的指令。

我使用html2js加载我的html模板。 它在$ compile上抛出了这个错误:

  

错误:[$ injector:unpr]未知提供者:CommonServiceProvider< -   CommonService

以下是我设置测试的方法:

beforeEach(inject(function ($rootScope, $compile, $controller, $q, $filter, $templateCache) {

    //scope instance to use in test cases.
    scope = $rootScope.$new();

    //set mock 
    var _commonService = MockCommonService($q, $filter).CommonService;


    //Inject fake service into controller
    var controller = $controller('PromoCreateGlobalCtrl', {$scope: scope, CommonService: _commonService});


    //for my directive tempalte
    var titleSearchTmplt = $templateCache.get('directives/title-search/title-search.html');
    $templateCache.put('app/directives/title-search/title-search.html', titleSearchTmplt);

    //for my main form template
    var templateHtml = $templateCache.get('promotion/create/global/promo-global-create.html');
    var formElem = angular.element(templateHtml).find('form');


    $compile(formElem)(scope); //error is thrown on this line.

    form = scope.form;

    scope.$apply();

    //directiveElem = getCompiledElement();

}));

我应该如何在指令的控制器上加载模拟服务? 我认为这就是造成这个问题的原因。 有人遇到同样的情况进行测试吗?

问题似乎是由于我在加载指令模板时第二次加载CommonService引起的。还是有其他原因?

1 个答案:

答案 0 :(得分:0)

您需要在之前注入服务

var CommonService

 beforeEach(inject(function ($rootScope, $compile, $controller, $q, $filter, 
$templateCache,_CommonService_){
CommonService=_CommonService_;}