Как написать модульный тест для обратного вызова подписки на услугу - PullRequest
1 голос
/ 08 мая 2019

Я учусь писать модульный тест на Angular.Я создаю httpService, имеющий метод sendToServer.Каждый компонент использует его для отправки запроса на сервер:

sendToServer(method, url, body, header, onSuccessCallback, onErrorCallback?);

Вот мой компонент

export class LoginComponent implements OnInit {

  constructor(private http: HttpService) {
   }
   data ;

  ngOnInit() {
    this.getToken();
  }

  getToken(){
    this.http.sendToServer("GET", "/api/tokent",{}, null, data=>{
      this.data = data;
    });
  }

}

Вот мой код модульного теста:

it("should call getTokent and return data", fakeAsync(() => {
    const response = "abc";
    component.getToken();
    spyOn(service, 'sendToServer').and.returnValue(of(response));
    tick(); 

    fixture.detectChanges();

    expect(component.data).toEqual(response);
  }));

Как можноЯ тестирую в функции обратного вызова http.senntoServer

1 Ответ

0 голосов
/ 24 мая 2019

Вам нужно запустить функцию обратного вызова внутри поддельного DataService вместо того, чтобы возвращать фиксированное значение.Использование returnValue, как следует из названия, возвращает значение, если метод вызывается и больше ничего не делает.

В вашем случае вы хотели бы использовать callFake, а внутри этой фальшивой функции вы можете затемвызвать ваш обратный вызов.

component.spec.ts

it('test callback', () => {
  spyOn(TestBed.get(DataService), 'sendToServer').and.callFake((parm1: string, param2: string, param3: any, param4: any, callback: (data) => {}) => {
        callback('DATA_RESULT');
  })
  fixture.detectChanges();
  expect(component.data).toEqual('DATA_RESULT');
});

Вот стекаблиц .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...