茉莉花:我该如何模拟模型中的编辑字段?

时间:2018-06-19 14:05:52

标签: angular jasmine automated-tests karma-jasmine karma-runner

在我的服务班级,我有几个服务。主要服务是添加,删除和编辑。我在弄清楚如何模拟编辑服务时遇到了一些麻烦。作为补充,我可以很容易地看到模型是否刚刚通过,就是这样。我不确定如何使用茉莉花来模拟实际的编辑,该编辑将实际编辑现有模型并返回现有模型。我不想创建一个初始模型并将其设置为等于已编辑模型,因为这不会测试我的服务。我认为我可以使用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);
}

1 个答案:

答案 0 :(得分:0)

那么您可以返回一个假值:

spyOn(service, 'edit').and.returnValue(Observable.of(/* your new value */));

但是那会使您的测试无用。就像尝试这样:

const str = 'xxx';
expect(str).toEqual('xxx');