问题描述
我正在使用 Cypress 组件测试。我目前有以下代码来设置我的一个组件测试套件,加载一次夹具(之前)然后每次都安装它(beforeEach)
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')
})
第一个测试有效,第二个测试使用空数据挂载组件。我究竟做错了什么?我可以将夹具从之前移动到 beforeEach,但是当它只需要完成一次时,夹具文件会被多次读取。
解决方法
我可以将夹具从之前移动到 beforeEach,但是当它只需要完成一次时,夹具文件会被多次读取。
实际上,赛普拉斯缓存读取的装置正是出于这个原因!
但是在某些边缘情况下,fixture 被更新(有点像一个简单的数据库)并且由于缓存而看不到新数据。
,这是 Mocha 的默认行为,因此每次测试后都会清除别名。您可以从 Cypress docs 中阅读更多相关信息。因此,移至 beforeEach()
应该可以为您解决问题。
beforeEach(function() {
cy.fixture('entries/index').as('index').then((index) => {
index.forEach((item) => {
item.created_at = DateTime.fromISO(item.created_at)
})
})
})