Jestem całkiem nowy w Angular i przejrzałem wszystkie podobne pytania dotyczące Stack Overflow, ale żaden nie pomógł mi. Wydaje mi się, że wszystko zostało poprawnie skonfigurowane, ale wciąż otrzymuję błąd "Nieznany dostawca" podczas próby wstrzyknięcia usługi do testu jednostkowego. Podałem mój kod poniżej - mam nadzieję, że ktoś zauważy oczywisty błąd!Wystąpił nieznany błąd dostawcy podczas wstrzykiwania usługi do testu jednostkowego Angular
zdefiniować swoje moduły w oddzielnym js plik tak:
angular.module('dashboard.services', []);
angular.module('dashboard.controllers', []);
Oto gdzie mogę zdefiniować usługę o nazwie EventingService (z logiką usunięte dla zwięzłość):
angular.module('dashboard.services').factory('EventingService', [function() {
//Service logic here
}]);
Oto mój kontroler, który używa usługi EventingService (wszystko działa poprawnie w czasie wykonywania):
angular.module('dashboard.controllers')
.controller('Browse', ['$scope', 'EventingService', function ($scope, eventing) {
//Controller logic here
}]);
Oto mój testów jednostkowych - jego linia gdzie próbować wstrzykiwać EventingService który powoduje błąd podczas uruchamiania testów jednostkowych:
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);
});
});
Kiedy wykonać test I ten błąd:
Error: Unknown provider: EventingServiceProvider <- EventingService
mam zapewnione, że mój plik specrunner.html jaśmin posiada wszystkie niezbędne pliki źródłowe (to jest projekt 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 -->
Właśnie c nie wiem dlaczego Angular rzuca ten błąd narzekając na moją EventingService. Mój kontroler działa dobrze w czasie wykonywania - właśnie wtedy, gdy próbuję go przetestować, dostaję błąd, więc jestem ciekawy, czy wkręciłem coś z kpiną/zastrzykiem.
Kątowa pomoc w testowaniu to bzdura, więc na razie jestem zaskoczony - każda pomoc lub sugestie, które ktoś może podać, byłyby bardzo doceniane. Dzięki.
Nowość w jednostce testowej Angulara w tej chwili, i całkowicie zgadzam się z "Pomocą Angulara w testowaniu jest bzdura, więc jestem zaskoczony w tej chwili" – Michel