【问题标题】:Preventing Firebase Auth from persisting across Cypress e2e test runs防止 Firebase 身份验证在赛普拉斯 e2e 测试运行中持续存在
【发布时间】:2018-08-10 17:14:22
【问题描述】:

我在我的 Firebase Web 应用程序上使用 Cypress 进行 e2e 测试,我希望测试运行始终从未经身份验证的状态重新开始。

如何防止 Firebase 身份验证会话在 e2e 测试运行中持续存在?

目前,我在测试结束时调用了logout() 函数。但如果在此之前测试失败,logout() 通常不会被调用,我必须在下一次测试运行之前手动注销。

【问题讨论】:

  • 我对firebase一无所知,但如果它将身份验证会话存储为cookie,您可以在beforeEach()中调用cy.clearCookie("nameOfCookie")
  • 不幸的是,这不起作用。无论如何,赛普拉斯在每次测试运行开始时都会自动转储所有 cookie 和本地存储。 Firebase 必须使用其他机制来保持状态。
  • 它应该在测试之间吹走 cookie,但我发现它不可靠并且不得不在我的测试中添加该调用以重置会话。祝你好运!
  • 如果logout() 为您工作,请致电afterEach(),请参阅this document
  • @RichardMatsen 您链接到的文档明确指出开发人员不应该afterEach() 中进行清理,然后列出了原因。因此,我正在努力寻找正确的实施方式。

标签: firebase firebase-authentication e2e-testing cypress angular-e2e


【解决方案1】:

您好,如上所述,您应该在 beforeEach() 方法中清除 firebase 身份验证令牌。

但是,根据 firebase 的版本,身份验证令牌可能存储在不同的存储中。 应该清除 Localstorage 和 indexdDB。

indexedDB.deleteDatabase('firebaseLocalStorageDb');

【讨论】:

  • 这个问题可以通过多种方式解读,但从 cmets 中的说明看来,令牌应该在 before() 中清除,而不是在 beforeEach() 中。
  • 有一个更通用的解决方案来清除 indexedDb here:它会清除所有列出的数据库。
猜你喜欢
  • 2019-02-27
  • 2020-07-30
  • 1970-01-01
  • 2019-12-27
  • 2023-02-10
  • 1970-01-01
  • 2019-09-11
  • 2019-07-12
  • 2021-10-29
相关资源
最近更新 更多