加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

单元测试 – angular2 – 如何在http.post单元测试中模拟错误

发布时间:2020-12-17 09:04:20 所属栏目:安全 来源:网络整理
导读:我正在使用HTTP.post调用为登录方法编写Uni-test,如: this.http.post( endpoint,creds,{ headers: headers}) .map(res = res.json()) .subscribe( data = this.onLoginComplete(data.access_token,credentials),err = this.onHttpLoginFailed(err),() = thi
我正在使用HTTP.post调用为登录方法编写Uni-test,如:
this.http.post( endpoint,creds,{ headers: headers})
        .map(res => res.json())
        .subscribe(
        data => this.onLoginComplete(data.access_token,credentials),err => this.onHttpLoginFailed(err),() => this.trace.debug(this.componentName,"Login completed.")
    );

问题是我无法模拟错误分支;每次都被称为onLoginComplete方法;

这是我的测试:

it("check that  Atfer Login,console show an error ",inject(
  [TraceService,Http,MockBackend,WsiEndpointService],(traceService: TraceService,http: Http,backend: MockBackend,wsiEndpoint: WsiEndpointService) => {

  let tokenTest: number =  404 ;

  let response: ResponSEOptions = null {} // i think i have to modify this

  let connection: any;

  backend.connections.subscribe((c: any) => connection = c);

  let authService: AuthService = new AuthService(http,Service1,Service2);

  authenticationservice.login({ "username": "a","password": "1" });

  connection.mockRespond(new Response(response));

  expect(ERROR);

}));

再次感谢大家.

首先,您需要通过MockBackend覆盖XHRBackend类:
describe('HttpService Tests',() => {
  beforeEachProviders(() => {
    return [
      HTTP_PROVIDERS,provide(XHRBackend,{ useClass: MockBackend }),HttpService
    ];
  });

  (...)
});

请注意,HttpService是使用Http对象的服务,我想测试.

然后你需要注入mockBackend并订阅其connections属性.发送请求时,将调用相应的回调,您可以指定响应元素,如正文.该服务将接收此响应作为呼叫的响应.因此,您将能够基于此测试您的服务方法.

下面我将介绍如何测试HttpService的getItems方法:

it('Should return a list of items',inject([XHRBackend,HttpService,Injector],(mockBackend,httpService,injector) => {
  mockBackend.connections.subscribe(
    (connection: MockConnection) => {
      connection.mockRespond(new Response(
        new ResponSEOptions({
          body: [ { id: '1',label: 'item1' }]
        })));
      });

  httpService.getItems().subscribe(
    items => {
      expect(items).toEqual([ { id: '1',label: 'item1' }]);
    });
  });
});

这是HttpService的getItems方法的代码:

@Injectable()
export class HttpService {
  constructor(private http:Http) {
  }

  getItems(): Observable<any[]> {
    return this.http.get('/items').map(res => res.json());
  }
}

要模拟错误,只需使用mockError方法而不是mockResponSEOne:

mockBackend.connections.subscribe(
    (connection: MockConnection) => {
      connection.mockError(new Error('some error'));
    });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读