这是我的代码:
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;
}
}
我的测试代码:
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();
});
});
});
错误:
#httpRequest()
✖ should get campaign data
Chrome 51.0.2704 (Mac OS X 10.11.5)
Error: Unexpected request: [object Object] undefined
我对源代码进行了调试,$ http已被$ httpBackend取代。 不知何故,$ httpBackend:方法的第一个参数,它是一个包含方法,url,data的对象,与$ http中的请求参数相同。显然,这是错误的。但我不知道如何解决它〜
请帮助。 我被困在这里一整天〜
答案 0 :(得分:1)
你应该传递$ http而不是$ httpBackend作为构造函数参数。
在测试代码中创建$ http类型的变量,并像这样传递
beforeEach(()=>{
httpService = new HttpService($q, $http)
});
一定会有用。