In meiner Angular App löst UI-Router ein Versprechen in den Controller. Beim Versuch, diesen Controller zu testen, beschwert sich Karma über einen unbekannten Anbieter. Wie injiziere ich ein falsches Objekt in den Test, um dieses Auflösungsobjekt darzustellen.Angular Jasmine UI Router injizieren Auflösung Wert in Test
Code Meine App sieht ungefähr so aus:
angular.module('myapp')
.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('tab.name', {
...
resolve: {
allTemplates: function(Templates) {
return Templates.all().then(function(templates) {
return templates;
});
}
}
})
})
.controller('QueriesCtrl', function(allTemplates, UserQuery) {
var vm = this;
vm.queries = allTemplates;
vm.goToUrl = function(index, data) {
var processedUrl = UserQuery.process(data, vm.queryTyped[index]);
UserQuery.goToUrl(processedUrl);
};
});
Beim Versuch, Tests ausführen ich den Fehler
Unknown provider: allTemplatesProvider <- allTemplates <- QueriesCtrl
Ich habe versucht, einen Spion zu schaffen und es injizieren, aber das funktioniert nicht . Hier ist mein Test im Moment:
describe('Unit: queriesCtrl', function() {
var controller,
scope,
UserQuery;
beforeEach(function() {
module('myapp');
inject(function($injector) {
UserQuery = $injector.get('UserQuery');
allTemplates = jasmine.createSpyObj('allTemplates', [{a:1}, {a:2}, {b:3}]);
});
});
describe('goToUrl', function() {
beforeEach(inject(function ($rootScope, $controller) {
scope = $rootScope.$new();
controller = $controller('QueriesCtrl as ctrl', {
'$scope': scope
});
}));
it('should call UserQuery.process()', function() {
spyOn(UserQuery, 'process');
scope.ctrl.goToUrl();
expect(UserQuery.process).toHaveBeenCalled();
});
});
});
@ Chandermani, ich bin neu in Mocha-Chai, könnte bitte helfen mit ähnlichen Problem bei http://StackOverflow.com/Questions/28606056/mocha-chai-test-case-for-angular-Configuration-file – mayank