我将如何为这个函数编写单元测试?提交表单时,它会发送一个 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 测试时,我基本上是通过编写模拟单击表单按钮和输入值的代码来模拟每个测试中的用户,然后检查以确保我得到有效的响应,或者我是否过于复杂了?