为什么fixture只在第一次运行组件测试中加载



我正在使用Cypress组件测试。我现在有下面的代码来设置我的一个组件测试套件,(之前(加载一次夹具,然后每次(之前(安装

before(() => {
cy.fixture('entries/index').as('index').then( (index) => {
index.forEach( (item) => {
item.created_at = DateTime.fromISO(item.created_at)
})
})
})
beforeEach(function() {
mount(component, {
propsData: {'index':this.index},
})
})

这在运行的第一个测试中完全符合预期,但在第二个测试中失败,因为"This.index"在第二次测试中未定义。通过转储输出,这种情况发生在第一次测试完成之后,而不是在安装组件时。

it("Does foo",() => {
cy.contains('foo')
}) 
it("Does bar", () => {
cy.contains('bar')
})

第一个测试工作,第二个测试组件是用空数据安装的。我做错了什么?我可以将fixture从before移到beforeEach,但当只需要读取一次fixture文件时,它会被多次读取。

我可以将fixture从之前移动到beforeEach,但当只需要读取一次fixture文件时,它会被多次读取

事实上,Cypress缓存fixture读取正是出于这个原因!

但也有一些边缘情况,即fixture被更新(有点像一个简单的数据库(,并且由于缓存而看不到新数据。

这是Mocha的默认行为,因此每次测试后都会清除别名。您可以从Cypress文档中了解更多关于它的信息。因此,转到beforeEach()应该可以为您解决问题。

beforeEach(function() {
cy.fixture('entries/index').as('index').then((index) => {
index.forEach((item) => {
item.created_at = DateTime.fromISO(item.created_at)
})
})
})

最新更新