0

フォーム検証フォームの単体テストを作成しています。私のメイン フォーム テンプレート コントローラーでは、挿入されたサービスをモックしています。また、フォーム テンプレートには、同じサービスを挿入するディレクティブも含まれています。

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 が 2 回目にロードされることが原因のようです。それとも他に原因があるのでしょうか?

4

1 に答える 1

0

beforeeach にサービスを注入する必要があります

var CommonService

 beforeEach(inject(function ($rootScope, $compile, $controller, $q, $filter, 
$templateCache,_CommonService_){
CommonService=_CommonService_;}
于 2016-08-08T04:53:20.473 に答える