0
我有一個服務:承諾在Restangular服務單元測試不能解決
angular.module('driveby').factory('BuildingsService', function(Restangular) {
var buildings = [];
var fetchBuildings = function() {
return Restangular.all('buildings').getList();
};
var getBuildings = function() {
return buildings;
};
return {
getBuildings: getBuildings,
fetchBuildings: fetchBuildings
};
});
我試圖單元測試這種使用茉莉花,但承諾從未解析:
describe('BuildingsService', function() {
var BuildingsService, httpBackend;
var buildingsUrl = '/api/buildings';
var mockBuildings = [
{id: 1},
{id: 2},
{id: 3}
];
beforeEach(module('driveby'));
beforeEach(inject(function($httpBackend) {
httpBackend = $httpBackend;
httpBackend.whenGET(buildingsUrl).respond(
JSON.stringify(mockBuildings)
);
}));
beforeEach(inject(function(_BuildingsService_) {
BuildingsService = _BuildingsService_;
}));
afterEach(function() {
httpBackend.verifyNoOutstandingExpectation();
httpBackend.verifyNoOutstandingRequest();
});
it('can fetch the list of buildings from the API', function() {
expect(BuildingsService.getBuildings().length).toEqual(0);
httpBackend.expectGET(buildingsUrl);
BuildingsService.fetchBuildings().then(function(buildings) {
expect(buildings.length).toEqual(3);
});
httpBackend.flush();
expect(BuildingsService.getBuildings().length).toEqual(3);
});
});
的問題是這條線從未在測試中執行:
expect(buildings.length).toEqual(3);
API路由是正確的,並且沒有突出的r equests,但httpFlush並沒有解決Restangular的承諾。這條線應該通過,但它返回0而不是3:
expect(BuildingsService.getBuildings().length).toEqual(3);
有人看到這裏有什麼問題嗎?