我正在爲具有依賴項的服務創建一個簡單的單元測試。這是一個簡單的服務,我開始幫助我瞭解最佳流程和結構。使用Angular 2注入依賴項的單元測試服務
我創建的單元測試工作,但TypeScript引發錯誤。
Argument of type '{ order_id: string; user: string; }' is not assignable to parameter of type 'Expected<Observable<any>>'.
Object literal may only specify known properties, and 'order_id' does not exist in type 'Expected<Observable<any>>'.
該服務對注入的服務執行發送HTTP請求的方法sendBody。我明白應該返回一個Observable,但我會認爲模擬服務應該已經解決了這個TypeScript類型的錯誤。
僅在測試服務時是否有更好的方法來注入和模擬依賴項?
服務
export class ReturnOrderService {
constructor(private _ReturnOrderResource: ReturnOrderResource) { }
updateOrderStatus(orderId: string, user: string) {
let body = {};
if (orderId !== undefined && user !== undefined) {
body["order_id"] = orderId;
body["user"] = user;
}
return this._ReturnOrderResource.sendBody(body);
}
}
規格
const MockReturnOrderResource = {
sendBody: function(body) {
return body;
}
}
describe('ReturnsComponent',() => {
beforeEach(() => {
TestBed.configureTestingModule({ providers: [
ReturnOrderService,
{ provide: ReturnOrderResource, useValue: MockReturnOrderResource }
] });
});
it('#updateOrderStatus should create an object literal from arguments',
async(inject([ReturnOrderService], (service: ReturnOrderService) => {
expect(service.updateOrderStatus("10006886","Mr Bungle")).toEqual({ order_id: '10006886', user: 'Mr Bungle' });
})));
});
是什麼'_ReturnOrderResource.sendBody'返回?你可以添加該代碼嗎? – sabithpocker
@sabithpocker它通過幾個不同的服務,但本質上只是使用Angular 2 Http類和Request方法發出POST請求:https://angular.io/api/http/Http#request。所以一個Observable預計將返回 – bmd