Как мне подойти к написанию модульного теста для этой функции? Когда форма отправляется, она отправляет запрос POST для получения токена входа. С ответом токена он затем отправляет еще один запрос, чтобы получить конкретные данные пользователя.
Вот функция:
// Log the user in and save the token, then get the details
onLoginSubmit() {
this.loggingIn = true;
// request the token then the details for the user based off the token
this.userService
.LoginUser(this.loginForm.value.username, this.loginForm.value.password)
.pipe(
tap(res => {
// console.log('Obtained Token:', res);
localStorage.setItem('login_token', res.token);
// this.utilityService.SetLocalStorage('login_token', res.token, 1, 'd');
}),
concatMap(() => this.userService.GetTokenDetails()),
)
.subscribe(
res => {
// console.log('Obtained User Data:', res);
localStorage.setItem('user', res.user);
// this.utilityService.SetLocalStorage('user', res.user, 1, 'd');
this.NavigateToRoute();
},
() => {
this.loggingIn = false;
},
);
}
Вот сервисные функции:
// logs in the user
LoginUser(email, password): Observable<any> {
return this.utilityservice.post('universal/login', { email, password }, this.utilityservice.GetHeaders());
}
// gets details of the current logged in user
GetTokenDetails() {
return this.utilityservice.get('universal/userAPI', { whoami: '' });
}
Для модульных тестов я предполагаю, что мне нужно создать фиктивную службу, в которой эти функции будут возвращать действительный ответ, например следующий:
// logs in the user
LoginUser(email, password): Observable<any> {
return { res: { token: 'test' } };
}
Это правильный подход или я совершенно не прав? Кроме того, когда дело доходит до тестирования E2E для моей страницы входа, я, по сути, имитирую пользователя в каждом тесте, пишу код, который имитирует нажатие кнопок формы и ввод значений, а затем проверяет, чтобы убедиться, что я получаю правильные ответы, или я слишком усложняю это?