Модульное тестирование с Angular 7 - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь написать модульный тест для этого углового сценария:

export class DataService {
  private csrfToken: string = '';

  private isContentShow: BehaviorSubject<boolean> = new BehaviorSubject(true);

  constructor(private http: HttpClient, private cookieService: CookieService) {
    this.token = this.cookieService.get('token');
  }

  public createData(data: Data) {
    try {
       this.http.post(  url,
                        data,
                        {
                          headers: new HttpHeaders({
                              'Content-Type':  'application/json',
                              'Authorization': this.token
                          })
                        })
      .subscribe(
        data => {
                this.isContentShow.next(true);
                },
        err => {
        this.showError();
        },
        () => console.log('Request Complete')
      );
      return true;
    } catch {
      this.showError();
      }
    }

  public getIsContentShow(): Observable<boolean> {
    return this.isContentShow.asObservable();
  } 
}

Тест, который у меня был до сих пор, и он работает, как и ожидалось.

 it('#getIsContentShow should return value from observable',
    (done: DoneFn) => {
    service.getIsContentShow().subscribe(value => {
      expect(value).toBe(true);
      done();
    });
  });

Однако я пытаюсьнаписать тест для createData() функции

Я могу смоделировать HttpClient, используя HttpClientTestingModule, однако я не знаю, как обработать CookieService и токен?

Спасибо

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете использовать шпионов, чтобы шпионить за методом get cookieService.Таким образом, вы можете написать свой модульный тест для проверки комбинаций возвратов, которые, по вашему мнению, может предоставить cookieService.

Эта ссылка говорит о том, что вы можете следить за прототипом метода, чтобыобрабатывайте это так, как вам нравится в конструкторе.

it(
  "should call #getGeneralStats in the constructor",
  inject(
    [CookieService, HttpClient],
    (cookieService: CookieService, http: HttpClient) => {
      let mySpy = spyOn(cookieService, 'get').and.returnValue(<your value>);

      dataService = new DataService(http, cookieService);

      expect(mySpy).toHaveBeenCalled();
    }
  )
);

Для вас это может зависеть от того, как вы пишете свои тесты.В этом примере показано, как создается экземпляр службы, например new ServiceName, но также можно использовать внедрение зависимостей для получения службы.Если вы используете DI для службы, которую вы тестируете, мне придется больше изучить, как это сделать (другие могут добавить свой ответ, если вы знаете, как это сделать)!

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