Hier ist mein Code:
export class httpService {
constructor($q, $http){
this.$q = $q;
this.$http = $http;
}
static getError(response) {
if (response.data && response.data.messages) {
return response.data.messages;
} else {
return ["Sorry, there is an internal issue..."];
}
}
httpRequest(url, method, data) {
url = encodeURI(url);
var deferred = this.$q.defer();
this.$http({
method: method,
url: url,
data: data
}).then(function (response) {
deferred.resolve(response.data);
}, function (response) {
deferred.reject(httpService.getError(response));
});
return deferred.promise;
}
}
Mein Testcode:
import angular from 'angular';
import ngMock from 'angular-mocks';
import {httpService as HttpService} from '../http.service';
describe("httpService",()=>{
var httpService;
var $q;
var $timeout;
var $httpBackend;
var campaignHttpRequestHandler;
var campaignTestUrl = 'api/campaign/aGJhZ2ZmZ2RmcmZ0';
var campaignData = {
"articles": [
{
"id": "1207",
"type": "a",
"order": 1
},
{
"id": "940",
"type": "p",
"order": 2
},
{
"id": "1268",
"type": "a",
"order": 3
},
{
"id": "954",
"type": "p",
"order": 4
}
],
"year_month": "201606",
};
beforeEach(inject((_$q_, _$timeout_, _$httpBackend_)=>{
$q = _$q_;
$timeout = _$timeout_;
$httpBackend = _$httpBackend_;
campaignHttpRequestHandler = $httpBackend.when('Get', campaignTestUrl).respond(campaignData);
}));
beforeEach(()=>{
httpService = new HttpService($q, $httpBackend);
});
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
describe("#httpRequest()",()=>{
it('should get campaign data',()=>{
$httpBackend.expect('Get', campaignTestUrl);
httpService.httpRequest(campaignTestUrl, 'Get').then(
(response)=>{
expect(response).toEqual(campaignData);
}
);
$httpBackend.flush();
});
});
});
Der Fehler:
#httpRequest()
✖ should get campaign data
Chrome 51.0.2704 (Mac OS X 10.11.5)
Error: Unexpected request: [object Object] undefined
Und Ich debugged in den Quellcode, $ http hat Biene n ersetzt durch $ httpBackend. Irgendwie ist der erste Parameter von $ httpBackend: Methode, es ist ein Objekt enthält Methode, URL, Daten, die gleichen Anfrage Parameter wie in $ http. Anscheinend ist es falsch. Aber ich weiß nicht, wie man es repariert ~
Hilfe bitte. Ich habe hier für den ganzen Tag stecken ~
Was passiert, wenn Sie 'GET' und nicht 'Get' verwenden, wie dokumentiert? Oder noch besser: wenn GET() und expectGET()? –
@ JBNizet der gleiche Fehler, es hat das Problem nicht gelöst –
$ http ist nicht gleich $ httpBackend, sie können nicht synonym verwendet werden. Diese Art von Fehler wird nicht passieren, wenn Dienste auf die vorgeschlagene Weise getestet werden. Gibt es einen Grund, warum die HttpService-Klasse manuell instanziiert wird? – estus