Winkel-Ressource-Tests: $httpBackend.flush() Unerwartete Anfrage
Ich testen will, angularjs Ressource.
'use strict';
/**
* AddressService provides functionality to use address resource in easy way.
*
* This is an example usage of method:
*
* `get`:
*
var a = AddressService.get({id: '1'},
function (data) {
//Work here with your resource
}
);
*
*/
App.factory('AddressService', function ($resource, $rootScope) {
var url = [
$rootScope.GLOBALS.API_PATH,
$rootScope.GLOBALS.API_VERSION,
'models/address/:id'
].join('/'),
actions = {
'get': {
method: 'GET',
params: {id: '@id'}
}
};
return $resource(url, {}, actions);
});
Habe ich den test:
'use strict';
var $httpBackend;
describe('Service: AddressService', function () {
beforeEach(module('myApp'));
beforeEach(inject(function ($injector) {
var url_get = 'api/v1/models/address/5';
var response_get = {
address_line_1: '8 Austin House Netly Road',
address_line_2: 'Ilford IR2 7ND'
};
$httpBackend = $injector.get('$httpBackend');
$httpBackend.whenGET(url_get).respond(response_get);
}));
describe('AddressService get test', function () {
it('Tests get address', inject(function (AddressService) {
var address = AddressService.get({ id: '5'});
$httpBackend.flush();
expect(address.address_line_1).toEqual('8 Austin House Netly Road');
expect(address.address_line_2).toEqual('Ilford IR2 7ND');
}));
});
});
Ich bin nicht erfahren mit den eckigen sehr gut.
Ich habe Jasmin in karma.config.js.
AngularJS v1.0.6
Yoeman und Grunzen verwalten Projekt.
Ich versuche grunt test
Running "karma:unit" (karma) task
INFO [karma]: Karma server started at http://localhost:8080/
INFO [launcher]: Starting browser Chrome
INFO [Chrome 27.0 (Linux)]: Connected on socket id RFFUY5bW8Hb5eTu0n-8L
Chrome 27.0 (Linux) Service: AddressService AddressService get Tests get address FAILED
Error: Unexpected request: GET views/home.html
No more request expected
at Error (<anonymous>)
at $httpBackend (/home/bart/y/projects/x/frontend/app/components/angular-mocks/angular-mocks.js:910:9)
at sendReq (/home/bart/y/projects/x/frontend/app/components/angular/angular.js:9087:9)
at $http (/home/bart/y/projects/x/frontend/app/components/angular/angular.js:8878:17)
at Function.$http.(anonymous function) [as get] (/home/bart/y/projects/x/frontend/app/components/angular/angular.js:9021:18)
at $q.when.then.then.next.locals (/home/bart/y/projects/x/frontend/app/components/angular/angular.js:7394:34)
at wrappedCallback (/home/bart/y/projects/x/frontend/app/components/angular/angular.js:6797:59)
at wrappedCallback (/home/bart/y/projects/x/frontend/app/components/angular/angular.js:6797:59)
at /home/bart/y/projects/x/frontend/app/components/angular/angular.js:6834:26
at Object.Scope.$eval (/home/bart/y/projects/x/frontend/app/components/angular/angular.js:8011:28)
Error: Declaration Location
at window.jasmine.window.inject.angular.mock.inject (/home/bart/y/projects/x/frontend/app/components/angular-mocks/angular-mocks.js:1744:25)
at null.<anonymous> (/home/bart/y/projects/x/frontend/test/spec/services/userdata/AddressService.js:32:30)
at null.<anonymous> (/home/bart/y/projects/x/frontend/test/spec/services/userdata/AddressService.js:31:5)
at /home/bart/y/projects/x/frontend/test/spec/services/userdata/AddressService.js:5:1
..................................................................
Chrome 27.0 (Linux): Executed 67 of 67 (1 FAILED) (0.343 secs / 0.179 secs)
Warning: Task "karma:unit" failed. Use --force to continue.
Wenn ich entfernen $httpBackend.flush()
im test. Test ist vorbei. Aber ich bin immer undefined
aus address
. Ich sah Beispiele: Beispiel alle flush()
Aber nur ich dumme Ausnahme: Error: Unexpected request: GET views/home.html
views/home.html
ist meine Ansicht im Projekt-Verzeichnis. Ich habe keine Ahnung, wie mein problem zu lösen, ich konnte nicht finden keine Lösung. Bin ich fehlt der Punkt, irgendwie?
Kann jeder sehen, Fehler in meinem code? Alle Vorschläge werden zu schätzen wissen.
BEARBEITEN
Habe ich festgestellt, dass ich brauche, um diese zu verwenden:
$httpBackend.when('GET', /\.html$/).passThrough();
Aber ein anderes problem ist, ich bin immer:
TypeError: Object #<Object> has no method 'passThrough'
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich schließlich die Lösung gefunden:
Ich habe versucht dieser zu Folgen: anderen post
Also ich habe
$templateCache
:den Fehler verursacht wird, durch Ihre test-Versuch zum laden der Haupt-Seite für Ihre app. Da haben Sie nicht gesagt, dass der test zu erwarten, dass diese server aufrufen, wird ein Fehler zurückgegeben. Finden Sie in der Dokumentation für $httpBackend für die Klarstellung in diesem Punkt.
Ihre $templateCache workaround ist konzipiert für unit-Tests Richtlinien nichts anderes. Sie waren ganz in der Nähe mit:
Da brauchen Sie nicht zu tun, nichts mit der eigentlichen template-Datei es ist eine sichere und einfache arbeiten rund um fügen Sie diese zu Ihrem beforeEach () - block.
Dieser hält Sie stets über die TypeError Sie hatte.
Ich hatte das gleiche Problem in meiner unit-tests nach dem Upgrade auf eine neue version von Angular JS und mit
respond('')
fein gearbeitet.