Angular 4 Jasmine test отслеживает свойство возвращать разные значения в разные тесты

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

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

      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 ответ

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

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. Я настроил это в тесте "это" как таковой:

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

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

Другие вопросы по тегам