フォーム検証フォームの単体テストを作成しています。私のメイン フォーム テンプレート コントローラーでは、挿入されたサービスをモックしています。また、フォーム テンプレートには、同じサービスを挿入するディレクティブも含まれています。
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 回目にロードされることが原因のようです。それとも他に原因があるのでしょうか?