Ich habe eine Probe Route wie folgt aus:Angular JS Testing mit Karma Jasmin
angular
.module('appRouter',['ui.router'])
.config(function($stateProvider,$urlRouterProvider){
$stateProvider
.....
.....
.state('settings.account',{
url:'/account',
templateUrl:'templates/account.html',
controller:function(resolveData){
console.log(resolveData);
},
resolve:{
resolveData : function($http){
var root = 'https://jsonplaceholder.typicode.com';
return $http.get(root+'/posts/1').then(function(response){
return response.data;
});
}
}
});
.....
Es ist nur eine Test-URL, wo ich Online-Probe JSON-Daten
https://jsonplaceholder.typicode.com/posts/1
Ich wollte den Zustand testen.
beforeEach(function(){
module('appRouter');
});
beforeEach(inject(function(_$rootScope_,_$injector_,_$state_,_$httpBackend_,$templateCache){
$rootScope = _$rootScope_;
$state = _$state_;
$injector = _$injector_;
$httpBackend = _$httpBackend_;
$templateCache.put('templates/account.html','');
}));
it('should resolve "resolveData"',function(){
const state = $state.get('settings.account');
const resolveFn = state.resolve.resolveData;
$httpBackend.whenGET('https://jsonplaceholder.typicode.com/posts/1').respond(function(){
return [
200,{
"userId": 1,
"id": 1,
"title": "...",
"body": "..."
}]
});
$httpBackend.expectGET('https://jsonplaceholder.typicode.com/posts/1');
$injector.invoke(resolveFn);
$httpBackend.flush();
expect($injector.annotate(resolveFn)).toEqual(['$http']);
console.log(angular.mock.dump($scope));
expect($scope.resolveData).toEqual({
"userId": 1,
"id": 1,
"title": "...",
"body": "..."
});
Aber das schlägt fehl. Sprichwort
1) should resolve "resolveData"
UI Routerer Config For Account
Expected undefined to equal Object({ userId: 1, id: 1, title: '...', body: '...' }).
at Object.<anonymous> (test/controllers/main-controller-spec.js:114:36)
Was mache ich falsch?
UPDATE
console.log(angular.mock.dump($scope));
gibt die folgende
Bitte helfen.
Ich denke, es gab Wert in der ursprünglichen Frage, die Sie (vor der Bearbeitung) mit dem ursprünglichen Fehler gestellt haben. Diese neue Fehlermeldung sollte eine neue Frage sein.Sie sind zwei getrennte Probleme, die einzeln behandelt werden sollten. –
Ich verstehe nicht genau, was Sie hier testen möchten. Ich meine: Tests sollten prüfen, ob Ihr Code eine Logik ausführt, die Sie erwarten. Aber stattdessen (soweit ich sehen kann) prüft Ihr Test, ob Sie einige JSON aus einer Anfrage erhalten können. Das ist nicht der Zweck von Tests. Vielleicht ist es ein guter Zweck der serverseitigen Tests. Stattdessen schlage ich vor, dass Sie einen Dienst innerhalb der "Lösung" aufrufen (ersetzen Sie einfach den $ http-Aufruf durch Injizieren eines Dienstes und rufen Sie eine seiner Methoden auf), jetzt können Sie den ifs-Dienst als Antwort auf "state.go" aufrufen und wenn der Dienst mit korrekten Parametern aufgerufen wird. (Das ist meine Meinung) – happyZZR1400