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

问题描述

我正在使用 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)
    })
  })
})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...