我有一个用于 E2E 测试的 Cypress (
12.9.0
) 设置,其中 e2e
文件夹中的每个文件都是一个具有一个 describe()
和许多 it()
测试的单个 e2e 场景。
每个场景及其测试都依赖于多个
intercept()
存根(每个场景都有相同的存根)并且不需要在每个 it()
测试之间重置 - 我希望它们为套件设置一次。
我原以为将
testIsolation
配置值设置为 false
会做到这一点,但似乎这并不能阻止拦截存根被清除 - 它只是 保留浏览器上下文.
有没有办法做到这一点,以防止必须为每个测试重新创建
intercept()
模拟,而是能够为每个测试套件创建一次模拟(describe()
)?
最简单的方法是使用
beforeEach()
挂钩。它在每次测试之前运行,因此每次都会重新创建您的拦截路线。
context('This is your test suite title', () => {
beforeEach(() => {
cy.intercept('**/api/*', { some: 'value' }).as('api')
})
it('This is your test case one title', () => {
cy.visit('/')
cy.wait('@api') // passes
})
it('This is your test case two title', () => {
cy.visit('/')
cy.wait('@api') // passes
})
})
使用简单的 HTML 片段进行测试
<script>
fetch('https://some-domain/api/1')
</script>
要看到它在第二次测试中失败,请将挂钩从
beforeEach()
更改为 before()
.