0
我正在嘗試使用TypeScript爲Angular Service編寫測試。我會誠實地說,我不知道我在做什麼,因爲這是我寫的第一個測試,所以任何幫助,將不勝感激。需要幫助爲Angular Service編寫Angular TypeScript Jasmine測試
我至今提供了以下錯誤: 類型錯誤:「未定義」不是(評估「this.httpAccessor.get(requestUrl)。然後」)
這裏是我試圖服務的對象測試:
/// <reference path="../../../typings/_references.ts" />
module app.service {
'use strict';
export interface IAvailability {
getAvailability(requirements: app.Requirements): ng.IPromise<any>;
}
export class Availability implements IAvailability {
static $inject = ['$filter', 'Service.HttpResourceAccessor'];
/**
* Constructor.
*/
constructor(private $filter: ng.IFilterService,
private httpAccessor: app.service.IHttpResourceAccessor) {
}
/**
* Returns availability promise
*/
getAvailability(requirements: app.Requirements): ng.IPromise<any> {
/**
* Generate the request url using the requirements
*/
var requestUrl = this.generateRequestUrlFromRequirements(requirements);
return this.httpAccessor.get(requestUrl).then((response) => {
var availability: app.ITripAvailability<app.ITripAvailability>response;
return availability;
});
}
/**
* Builds the request url using the requirements
*/
private generateRequestUrlFromRequirements(requirements: app.Requirements): string {
//The request string that will be returned after building
var requestUrl: string = '';
var baseAddress = 'http://localhost:8080/';
//Code emitted as this just builds a string and works fine
return requestUrl;
}
}
angular.module('app.service')
.service('Service.Availability', Availability);
}
這是迄今爲止測試:
/// <reference path="../../../../typings/_references.ts" />
/// <reference path="../../../../typings/angularjs/angular-mocks.d.ts" />
/// <reference path="../../../../typings/jasmine/jasmine.d.ts" />
module app.service {
describe("app.service.IAvailability",() => {
'use strict';
var $filter: ng.IFilterService;
var mockAvailabilityService: app.service.Availability;
var mockHttpAccessor: app.service.IHttpResourceAccessor;
var requirements: app.Requirements;
beforeEach(() => {
angular.mock.module('app');
});
beforeEach(() => {
angular.mock.module('app.service');
});
/**
* Pre-test function before the test is executed
*/
beforeEach(() => {
requirements = new app.Requirements();
angular.mock.inject((_$filter_: ng.IFilterService) => {
$filter = _$filter_;
mockHttpAccessor = <app.service.IHttpResourceAccessor>jasmine.createSpyObj(
"httpAccessor", ["get"]);
mockAvailabilityService = new app.service.Availability(
<ng.IFilterService>$filter,
<app.service.IHttpResourceAccessor>mockHttpAccessor);
});
});
it('Should call httpAccessor.get',() => {
mockAvailabilityService.getAvailability(tripRequirements);
expect(mockHttpAccessor.get).toHaveBeenCalled();
});
//How do I check if promise has been resolved?
});
}
謝謝。這樣可行。但是,我將如何調用實際方法並查看它是否有效?我編輯了這個問題以顯示我所嘗試的內容。 – AngularBoy
在你調用'createService'之後,'availabilityService'就是你服務的一個實例,你可以調用它的任何方法,或者訪問它的任何其他屬性,具體取決於你正在測試的內容。 – Brocco
我將如何調用並測試this.httpAccessor.get .....? – AngularBoy