如何使用cypress测试使用Firebase身份验证和Firestore的Angular应用程序

问题描述 投票:1回答:2

我有一个Angular应用程序,它使用Firebase身份验证登录,然后读取和写入数据到Firestore数据库。我想为它做一些e2e测试。

我宁愿用模拟数据或本地服务器编写测试。

到目前为止,我还没有找到任何运行Firestore的本地方式。我看到你可以用cy.stub来删除方法,但我不清楚如何用Angular2做到这一点。如何获取我想要删除方法的对象?在实际代码中,它们是在构造函数中注入的依赖项

或者使用Angular和Firebase(AngularFire2)编写赛普拉斯e2e测试的首选方法是什么?有什么好建议吗?

谢谢

angular firebase google-cloud-firestore angularfire2 cypress
2个回答
0
投票

Firebase不提供任何本地实施;它包含(我推测)在Google服务器上运行的大量专有代码。

但对于隔离的搜索环境,您可以使用第二个Firebase数据库,该数据库与实际生产的Firebase中的数据库不同。我们通过使用Angular CLI“环境”(最近重命名为“配置”)来完成此操作。使用此机制,您可以在运行测试时使用不同的firebase配置,而不是用于实际部署。

我意识到这并没有提供你正在寻找的答案,一些完全在本地运行的东西;但它工作得相当好,并且易于设置。

(此外,这与赛普拉斯没有任何关系......上述内容与Protractor同样有效。)


0
投票

我知道这是一个老问题,但我最近遇到了类似的问题(我认为),并提出了迄今为止运作良好的解决方案。

如果AngularFire2是强类型的,您可以在服务中包装应用程序对它的访问权限,然后尝试编写该服务的简单存根,该存根返回与AngularFire2服务相同的接口的对象。

然后,您可以使用Angular的依赖项注入和环境文件来针对存根版本运行e2e测试。

因为它是类型安全的并且依赖于AngularFire2自己的类型,如果它们改变了,那么你的存根将停止编译,你将不得不更新它(这很好!)。

您还可以使用TypeScript的partial关键字来实现您关心的接口位,这意味着您不必存根所有内容,只需要依赖代码中依赖的位。

我在这里写了一个关于这种方法的简要指南:

http://wtfisanapi.com/htf-do-i-write-e2e-tests-with-a-stubbed-dependency-angular-nrwl-nx-edition/

这里有完整的演示源代码:

https://github.com/robt1019/e2e-stub-demo

我对Firebase或Firestore不是很熟悉,但是我已经成功地使用这种方法对一个执行大量网络类型任务的库的存根版本运行e2e测试。

你到底做了什么?

© www.soinside.com 2019 - 2024. All rights reserved.