Mocking AWS Cognito Identity pools for frontend unit tests to elevate error: "No Cognito Identity pool provided for unauthenticated access"

Mocking AWS Cognito Identity pools for frontend unit tests to elevate error: "No Cognito Identity pool provided for unauthenticated access"

我正在为一个使用预建 AWS angular 模板的 angular 项目进行前端单元测试(Jasmine、Karma)。我是该项目和 AWS 的新手。该应用程序本身可以正常运行。最终,应该没有 AWS/server 连接,所有服务都将被模拟。

我 运行 遇到的问题是当 Karma 单元测试规范为 运行 时看似 随机 组件引起的不一致错误。这些组件没有与 AWS 相关的调用或服务调用。很多都很简单,主要是前端模板(没有后端相关逻辑)。

Error: Uncaught (in promise): No Cognito Identity pool provided for unauthenticated access

我仍在努力思考 AWS 服务(用户池、身份池等)——并且不知道为什么会出现此错误。

有人可以解释一下发生了什么,或者我可以如何通过某种配置在应用程序中完全模拟 AWS,或者创建一个模拟用户身份池来提升此错误。我已经阅读了每个网页的感觉,但仍然卡住了:(

提前致谢!

我认为它正在发生,因为 AWS 逻辑仍在 运行 注入其中一个组件的服务中,或者那些功能仍然 运行。

https://testing-angular.com/debugging-tests/#debugging-tests

^ 这是学习单元测试的非常好的资源,但是有关于调试测试的章节。

https://testing-angular.com/faking-dependencies/#faking-dependencies

^ 这里有一章是关于伪造依赖关系的。

^ 不幸的是,随着 TypeScript 和 Jasmine 的进步,很难模拟像 amazon-web-services 这样的 npm 包。我发现以上答案是最好的方法。

希望所有这些对您有所帮助。

我通过 mocking 应用程序调用的 Auth 服务修复了以下问题。这也可以通过在 AWS Cognito 调用上添加间谍来完成。我只是简单地向应用程序返回了表明我已登录的虚假凭据,并告诉我的 TestBed 模块使用它而不是真正的 AuthService。下面是我添加到这个模拟服务中的唯一代码 class,到目前为止它一直有效。

auth.mock-service.ts

AuthContext$ = of({
    username: ''
});

这适用于我的前端单元测试,因为根本不需要连接到 AWS。