Angular 4 Jasmine test отслеживает свойство возвращать разные значения в разные тесты - PullRequest
0 голосов
/ 06 декабря 2018

Это для Angular4, использующего Жасмин для тестирования.

У меня есть свойство, которое вызывается в компоненте из метода получения в службе.В разных случаях (отраженных в разных тестах) служба должна либо возвращать строковое значение, либо нулевое значение.Мне нужно проверить часть кода в компоненте, который проверяет значение этого свойства на ноль и перемещается в другое место, в зависимости от значения свойства.Вот код компонента:

      this.authService.educatorPinToken
        ? this.router.navigate(['components/student/data-entry-summary'])
        : this.router.navigate(['components/student/student-dash']);

Я установил фиктивную службу и добавил шпион для этого свойства.Я могу установить значение свойства в beforeEach, но не могу найти способ установить разные значения в каждом из моих двух тестов.Я пытался это, но безрезультатно:

В beforeEach:

  const authServiceMock = { get studentAgentId() { return null; }, deleteEducatorToken: null, get educatorPinToken() { return null; } };
  let educatorPinTokenSpy: jasmine.Spy;    

  beforeEach(() => {
    spyOnProperty(authServiceMock, 'studentAgentId').and.returnValue('1');
    educatorPinTokenSpy = spyOnProperty(authServiceMock, 'educatorPinToken').and.returnValue(null);
    spyOn(authServiceMock, 'deleteEducatorToken');
  });

И этот код в самом тесте:

educatorPinTokenSpy.and.returnValue('WXYZ');
fixture.detectChanges();

Но это не сбрасываетзначение - это все еще возвращает ноль компоненту.Как я могу это сделать?

1 Ответ

0 голосов
/ 06 декабря 2018

Я наконец понял это: в описании:

const authServiceMock = { get studentAgentId() { return null; }, deleteEducatorToken: null, get educatorPinToken() { return 'test'; } };

const authServiceMock = { get studentAgentId() { return null; }, deleteEducatorToken: null };
beforeEach(() => {
    spyOnProperty(authServiceMock, 'studentAgentId').and.returnValue('1');
    spyOn(authServiceMock, 'deleteEducatorToken');

});

Я не настроил шпиона в beforeEach.Я настроил его в тесте "it" следующим образом:

const educatorPinTokenMock = TestBed.get(AuthService);
educatorPinTokenMock.educatorPinToken = 'WXYZ';

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

...