我正在为具有依赖项的服务创建一个简单的单元测试。这是一个简单的服务,我开始帮助我了解最佳流程和结构。使用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