使用callFake()测试HttpClient调用

时间:2017-11-29 14:47:24

标签: javascript angular unit-testing jasmine

我正在尝试创建一个规范来测试我的Angular服务中发出GET请求的方法。我遇到的困难是嘲笑让它返回错误而不是响应的方法。如果我无法让它返回错误(例如400或500)我无法提供完整的代码覆盖...

正在测试的代码:

maingrid.service.ts:

 async loadAccountListPromise(id: string) {
     let queryParams = `?emailAddress=${id}`;
     let promise = new Promise((resolve, reject) => {
          this.http.get(`${this.baseUrl}` + queryParams, { responseType: 'json' })
             .toPromise()
             .then(
             (data) => {
                 this.results = this.formatData(data);
                 resolve(this.results);
             },
             (err) => {
                 this.logService.error('loadAccountListPromise() exception:', err);
                 this.setError(this.message[0], err);
                 reject('loadAccountListPromise() exception');
             }
         );
     });
     return promise;
 }

 setError(errorMessage: string, errorCode?: string): void {
     this._error.next(new NxpError(errorMessage, 'AccountListService', 
     errorCode));
 }

 clearError(): void {
     this._error.next(null);
 }

这是我试图使用callFake()模拟方法的规范:

maingrid.service.spec.ts

    it('logs and sets a local error for system errors/exceptions', () => {

            let id: string = 'ppandya@pershing.com';
            let myUrl = 'https://localhost:9999/...';
            let queryParams = `?emailAddress=${id}`;

            spyOn(httpClient, 'get').and.callFake( loadAccountListPromise( (response) => {
                // need to return error here...somehow
            }));

            spyOn(logService, 'error');

            spyOn(maingridService, 'setError');

            maingridService.loadAccountListPromise(id);

            let request = httpMock.expectOne(myUrl + queryParams);

            expect(request.request.method).toEqual('GET');

            httpMock.verify();

            expect(logService.error).toHaveBeenCalled();
            expect(maingridService.setError).toHaveBeenCalled();
        });

我不确定要正确模拟loadAcountListPromise()方法需要做什么,以便它进入错误块并调用setError()logService.error()方法。

1 个答案:

答案 0 :(得分:1)

尝试使用' spyOn()'并返回这样的投掷:

fs.open('path',mode='rb').read()