Je crée un test unitaire simple pour un service qui a une dépendance. C'est un service simple que je commence à aider à comprendre le meilleur processus et la meilleure structure.Service de test unitaire avec dépendance injectée utilisant Angular 2
Le test unitaire que j'ai créé fonctionne mais TypeScript renvoie une erreur.
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>>'.
Le service exécute la méthode sendBody sur le service injecté qui effectue une requête HTTP. Je comprends qu'un Observable devrait être renvoyé ici mais j'aurais pensé que le service de simulation aurait dû résoudre cette erreur de type TypeScript.
Existe-t-il un meilleur moyen d'injecter et de fausser les dépendances lors du test de services uniquement?
service
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);
}
}
Spec
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' });
})));
});
qu'est-ce que '_ReturnOrderResource.sendBody' retour? Pouvez-vous ajouter ce code aussi? – sabithpocker
@sabithpocker il est passé à travers quelques services différents mais essentiellement fait juste une requête POST en utilisant la classe HTTP 2 Angulaire et la méthode Request: https://angular.io/api/http/Http#request. Donc, un Observable devrait être retourné – bmd