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';
Хитрость в том, что мне нужно вернуться на тестовый стенд, чтобы это изменить, так как оно уже настроено к моменту выполнения тестового кода.