Ich frage mich, wie sollte man mit Karma Test mit Angular.js + UI Router testen?Karma Tests mit Angular.js + UI Router
Ich habe den folgenden Status definiert: Welche hat zwei Resolves, die einige Daten abruft und bereitet die Daten für den Controller. (Von Ember Hintergrund, das macht eine Menge Sinn.)
$stateProvider
.state('users', {
resolve: {
getData: function (User) {
return User.query().$promise
},
stateModels: function (getData) {
var models = {}
models.users = getData
return models
}
},
url: '/',
templateUrl: '/views/users/index.html',
controller: 'UsersIndexCtrl'
})
Unsere UserIndexCtrl wie folgt aussieht: (die den aufgelöst stateModels nehmen und weist sie den $ Umfang, so die Ansicht kann es verwenden,)
app.controller('UsersIndexCtrl', [
'$scope', '$state', 'stateModels',
function ($scope, $state, stateModels) {
$scope.users = stateModels.users
}])
Das funktioniert gut im Browser, ich sehe die richtigen Ergebnisse. Wenn es jedoch um Tests geht, gibt es mir seltsame Fehler. Hier
ist ein Beispiel Karma Unit-Test:
describe('controllers', function() {
var $httpBackend
, $rootScope
, $scope
, $state
, $httpBackend
, $controller
beforeEach(module('app'))
beforeEach(inject(function ($injector) {
$state = $injector.get('$state')
$rootScope = $injector.get('$rootScope')
$httpBackend = $injector.get('$httpBackend')
$scope = $rootScope.$new()
$controller = $injector.get('$controller')
}))
it('UserIndexCtrl should exist', inject(function() {
$httpBackend
.expect('GET', '/api/users')
.respond(200, {users: [ {}, {}, {} ]})
$state.go('users')
$rootScope.$apply()
$controller('AdminZonesIndexCtrl', { $scope: $scope, $state: $state });
$rootScope.$apply()
assert.equal($scope.users.length, 3)
}))
})
Und ich sehe:
[$injector:unpr] Unknown provider: stateModelsProvider <- stateModels
http://errors.angularjs.org/1.3.0-build.2937+sha.4adc44a/$injector/unpr?p0=stateModelsProvider%20%3C-%20stateModels
Error: [$injector:unpr] Unknown provider: stateModelsProvider <- stateModels
http://errors.angularjs.org/1.3.0-build.2937+sha.4adc44a/$injector/unpr?p0=stateModelsProvider%20%3C-%20stateModels
Die Idee dabei ist:
- Wir verspotten die API-Anforderung, so dass GET-Anfragen an/api/users werden ein Array von 3 Objekten zurückgeben.
- Wir gehen in den Zustand namens Benutzer
- Wir erwarten zu sehen, dass die $ scope.users ein Array von 3 Objekten sein sollte.
- Von diesem Test haben wir beide im Router definierten Auflösungen getestet, und der Controller hat die aufgelösten Objekte korrekt zugewiesen.
Dank Bill
Diese hübsche Zusammenfassung meiner Probleme. – Bill
@scarlz, ich bin neu in Mocha-Chai, könnten Sie mir bitte helfen mit ähnlichen Problem veröffentlicht unter http://stackoverflow.com/questions/28606056/mocha-cha-test-case-for-angular-configuration-file – mayank
Das fasst mein Leben ziemlich zusammen. – Igor