我对 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 对测试的帮助是垃圾,所以我现在很难过 - 任何人都可以提供的任何帮助或建议将不胜感激。谢谢。