【发布时间】:2020-06-12 16:41:39
【问题描述】:
我是单元测试的新手,所以请耐心等待
我正在尝试对用于在 Angular 应用程序中使用 Amplify 记录用户的服务进行单元测试。
现在在我正在做的规范文件中:
beforeEach(async () => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule,
],
providers: [
MyService, Amplify
]
}
myService = TestBed.get(MyService)
amplify = TestBed.get(Amplify)
})
it('should login', async () => {
const objToBeReturned = { signInUserSession: { idToken: { jwtToken: 'tokenValue' } } }
spyOn(Amplify.Auth, 'signIn').and.returnValue(objToBeReturned)
await myService.login('username', 'password')
})
在 MyService 中:
public async login(username: string, password: string) {
const authUser = await Amplify.Auth.signIn(username.toLowerCase(), password)
if (authUser.signInUserSession != null) {
const idToken = authUser.signInUserSession.idToken.jwtToken
return this.patientLogin(idToken)
}
}
private async patientLogin(idToken?: string): Promise<boolean> {
await this.sendRequest<LoginResponse>(url, data).pipe(
tap(response => {
if (!isLoginResponse(response)) {
throw throwErr({ code: 'Generic' })
}
this.token = response.token
})
).toPromise()
return true
}
这给了我错误异步函数没有在 5000 毫秒内完成
我很确定这取决于我嘲笑 Amplify 的方式
我如何正确地模拟它?
【问题讨论】:
-
你的服务好像没有使用注入的Amplify,是直接调用的。
-
关于如何正确执行的任何建议?问题是,如果我不模拟 signin 方法,我会收到错误:Cannot read property 'clientMetadata' of undefined
标签: angular unit-testing jasmine karma-jasmine