在我的服务班级,我有几个服务。主要服务是添加,删除和编辑。我在弄清楚如何模拟编辑服务时遇到了一些麻烦。作为补充,我可以很容易地看到模型是否刚刚通过,就是这样。我不确定如何使用茉莉花来模拟实际的编辑,该编辑将实际编辑现有模型并返回现有模型。我不想创建一个初始模型并将其设置为等于已编辑模型,因为这不会测试我的服务。我认为我可以使用toBe并比较我更改的特定字段。老实说,我只是不确定如何在jasmne中更改模型领域。我将分享测试的结构。我想确保编辑服务确实在起作用,而不仅仅是我操纵模型。老实说,我可能对单元测试一无所知,因此,如果我以错误的方式看待这种情况,请现在让我来。任何建议都很好。谢谢!
规格:
fit('should edit the model',
inject([HttpTestingController, HttpService],
(httpClient: HttpTestingController, service: HttpService) => {
// We call the service
service.edit(dummyPost, 'http://localhost:4200/dashboard').subscribe(body => {
});
// We set the expectations for the HttpClient mock
const req = httpClient.expectOne({ url: 'http://localhost:4200/dashboard', method: 'POST'});
//expect(req.request.body).toBe(dummyPost); req.flush(dummyPost);
expect(req.request.body.userId).toBe('EditedUserId');
服务:
edit(model, url: string): Observable<any[]> {
let headers = new HttpHeaders({
'Content-Type':
'application/json; charset=utf-8'
});
let options = { headers: headers };
let body = JSON.stringify(model);
return this.http.put(url, body, options)
.map(this.extractData)
.catch(this.handleErrorObservable);
}
答案 0 :(得分:0)
那么您可以返回一个假值:
spyOn(service, 'edit').and.returnValue(Observable.of(/* your new value */));
但是那会使您的测试无用。就像尝试这样:
const str = 'xxx';
expect(str).toEqual('xxx');