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

时间:2018-07-16 20:13:32

标签: angular firebase google-cloud-firestore angularfire2 cypress

我有一个Angular应用程序,该应用程序使用Firebase身份验证进行登录,然后将数据读写到Firestore数据库中。我想为此做一些端到端测试。

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

到目前为止,我还没有找到运行Firestore的任何本地方法。 我看到您可以使用cy.stub存根方法,但是我不清楚如何使用Angular2做到这一点。如何保留要存入方法的对象?在真实的代码中,它们是依赖注入到构造函数中的

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

谢谢

2 个答案:

答案 0 :(得分:0)

Firebase不提供任何本地实现。它由(我认为)在Google服务器上运行的大量专有代码组成。

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

我意识到这不能提供您正在寻找的答案,而是可以在本地完全运行;但它运作良好,并且易于设置。

(此外,这与赛普拉斯无关...以上与量角器同样有效。)

答案 1 :(得分:0)

我知道这是一个老问题,但是最近(我认为)我遇到了一个类似的问题,并提出了一个到目前为止效果很好的解决方案。

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

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

因为它是安全的类型,并且依赖于AngularFire2自己的类型,所以如果它们更改,则您的存根将停止编译,而您将不得不对其进行更新(这很好!)。

您还可以使用TypeScript的partial关键字仅实现您所关心的接口的位,这意味着您不必对所有内容都进行存根,只需对代码中依赖的位进行存根。 / p>

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

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测试。

您最终做了什么?