私は Angular を初めて使用し、Stack Overflow で同様に関連するすべての質問を確認しましたが、どれも役に立ちませんでした。すべてが正しくセットアップされていると思いますが、単体テストにサービスを挿入しようとすると、「不明なプロバイダー」エラーが引き続き発生します。以下にコードを配置しました - 誰かが明らかなエラーを見つけられることを願っています!
次のように、モジュールを別の.jsファイルに定義します。
angular.module('dashboard.services', []);
angular.module('dashboard.controllers', []);
ここで、EventingService というサービスを定義します (簡潔にするためにロジックを削除しています)。
angular.module('dashboard.services').factory('EventingService', [function () {
//Service logic here
}]);
EventingService を使用するコントローラーを次に示します (これは実行時にすべて正常に動作します)。
angular.module('dashboard.controllers')
.controller('Browse', ['$scope', 'EventingService', function ($scope, eventing) {
//Controller logic here
}]);
これが私の単体テストです - 単体テストを実行するとエラーを引き起こす EventingService を挿入しようとする行です:
describe('Browse Controller Tests.', function () {
beforeEach(function () {
module('dashboard.services');
module('dashboard.controllers');
});
var controller, scope, eventingService;
beforeEach(inject(function ($controller, $rootScope, EventingService) {
scope = $rootScope.$new();
eventingService = EventingService
controller = $controller('Browse', {
$scope: scope,
eventing: eventingService
});
}));
it('Expect True to be True', function () {
expect(true).toBe(true);
});
});
テストを実行すると、次のエラーが発生します。
エラー: 不明なプロバイダー: EventingServiceProvider <- EventingService
jasmine の specrunner.html ファイルに必要なソース ファイルがすべて含まれていることを確認しました (これは Asp.Net MVC プロジェクトです)。
<!-- Include source files here... -->
@Scripts.Render("~/bundles/jquery")
<script type="text/javascript" src="@Url.Content("~/Scripts/angular.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/angular-mocks.js")"></script>
<script type="text/javascript" src="@Url.Content("~/App/scripts/app.js")"></script> <!-- Angular modules defined in here -->
<script type="text/javascript" src="@Url.Content("~/App/scripts/services/eventing.js")"></script> <!-- My Eventing service defined here -->
<script type="text/javascript" src="@Url.Content("~/App/scripts/controllers/browse.js")"></script> <!-- My Browse controller defined here -->
<!-- Include spec files here... -->
<script type="text/javascript" src="@Url.Content("~/App/tests/browse.js")"></script> <!-- The actual unit test here -->
Angular が EventingService について不平を言ってこのエラーをスローしている理由を理解できません。私のコントローラーは実行時に正常に動作します-テストしようとするとエラーが発生するので、モック/インジェクションで何かを台無しにしたかどうかに興味があります。
テストに関する Angular のヘルプはくだらないので、現時点では困惑しています。誰かが提供できるヘルプや提案は非常に高く評価されます。ありがとう。