为赛普拉斯测试禁用Web安全性会保留状态-如何强制清除?

问题描述

对于使用赛普拉斯的E2E测试,我们必须将chromeWebSecurity设置为false,以防止在针对已部署的后端从Gitlab运行程序中运行请求时发生CORS问题。不幸的是,禁用此标志还会导致意外的副作用,例如在测试之间不会清除本地存储和cookie,从而保留状态,因此测试不是孤立运行的,甚至会根据其顺序导致不确定的行为。

一个可能的解决方法是在所有beforeEach块中添加一个具有以下内容describe

// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
cy.clearCookies({ domain: null });
cy.clearLocalStorage();

这不仅会导致测试运行时间更长,而且必须在单个文件中多次手动添加这些代码确实很麻烦并且容易出错。最后,第一行是黑客,因为domain选项没有记录,只有内部可用。我个人担心此选项在某些时候将不可用,并且会在没有有用的错误消息的情况下导致错误,而且我真的不喜欢依赖内部实现细节。

在禁用chromeWebSecurity的同时,还有其他惯用且安全的方法来清理整个状态吗?

解决方法

一种确定的方法是将每种情况分开放在不同的规格文件中。在文件npx cypress run之间关闭浏览器,然后再次启动