Jasmine でいくつかの Angular.js コードをテストしています。これを行うには、Angular インジェクターが必要です。
var injector = angular.injector(['ng', 'ngRoute', 'mainModule']);
これは問題なく動作しますが、$location を使用するコントローラーをテストするときは、それをインジェクターに追加する必要があります。
var injector = angular.injector(['ng', 'ngRoute', 'location', 'mainModule']);
これでエラーがスローされます:
Error: Error: [$injector:modulerr] Failed to instantiate module location due to:
Error: [$injector:nomod] Module 'location' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
そこに $location サービスを含めるにはどうすればよいですか? ありがとう。
- - - - - - - 編集 - - - - - - - - -
多くの回答がなかったので、詳細を追加すると思いました。
これが私がテストしようとしているコントローラーです(またはその定義、すべてのコードを貼り付けるわけではありません):
var app = angular.module('mainModule');
app.controller('appController', ['$window', '$scope', '$location', '$wsService', '$userService', '$labelService', function ($window, $scope, $location, $wsService, $userService, $labelService) {
//body of the controller
}]);
元の投稿の単体テストでインジェクターを作成する方法を既に見ましたが、インジェクターを使用してコントローラーを作成する方法は次のとおりです。
var scope;
var controller;
var getController = function() {
injector.invoke( ['$rootScope', '$controller', function ($rootScope, $controller) {
scope = $rootScope.$new();
controller = $controller('appController', {$scope: scope});
}]);
};
これがいくつかの潜在的な答えを生み出すのに役立つことを願っています. ありがとう