如何在 Cypress 上附加到 window
How to append to window on Cypress
我正在测试一个 vue 应用程序,它有一个依赖于 window 方法的混合:
export default {
data () {
return {
aurora: window.Aurora || {}
}
},
methods: {
quickView () {
const hasQuickViewElement = document.querySelector('#product-quickview')
if (hasQuickViewElement && this.id && typeof this.aurora.quickview === 'function') {
this.aurora.quickview(this.id)
}
},
wishlist () {
if (this.id && typeof this.aurora.showOverlay === 'function') {
this.aurora.showOverlay('#add-shop-list', { prodId: this.id })
}
}
}
}
我正在尝试模拟此 window 对象添加以下代码以支持文件
Cypress.on('window:before:load', (win) => {
console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaa', win)
win.Aurora = 'haushuhuashuas'
})
Cypress.on('window:load', (win) => {
console.log('bbbbbbbbbbbbbbbbbbbbbbbbbbbb', win)
console.log(win.Aurora)
})
不幸的是,当测试运行时,'window:before:load' 永远不会运行并且不会执行 console.log 并且不会将值附加到 window。
是否有另一种方法来拦截 window 并将数据附加到 window 以便我的组件在测试运行时使用它?
如果 'window:before:load' 没有 运行,可能是您将该代码放在了规范的错误部分。
应该在访问之前,或者使用访问选项
cy.visit('...', {
onBeforeLoad: (win) => {
...
},
})
但我怀疑当时 Vue 可能没有设置 win.Aurora
,因为它需要先启动。
组件测试
使用Cypress组件测试器时,需要给一个{ attachTo: ... }
选项。
const win = cy.state('window')
win.Aurora = {
quickview: () => 'Aurora is mocked'
}
const wrapper = mount(MyComponent, {
attachTo: win
})
现在 window:before:load
事件也将触发。
我正在测试一个 vue 应用程序,它有一个依赖于 window 方法的混合:
export default {
data () {
return {
aurora: window.Aurora || {}
}
},
methods: {
quickView () {
const hasQuickViewElement = document.querySelector('#product-quickview')
if (hasQuickViewElement && this.id && typeof this.aurora.quickview === 'function') {
this.aurora.quickview(this.id)
}
},
wishlist () {
if (this.id && typeof this.aurora.showOverlay === 'function') {
this.aurora.showOverlay('#add-shop-list', { prodId: this.id })
}
}
}
}
我正在尝试模拟此 window 对象添加以下代码以支持文件
Cypress.on('window:before:load', (win) => {
console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaa', win)
win.Aurora = 'haushuhuashuas'
})
Cypress.on('window:load', (win) => {
console.log('bbbbbbbbbbbbbbbbbbbbbbbbbbbb', win)
console.log(win.Aurora)
})
不幸的是,当测试运行时,'window:before:load' 永远不会运行并且不会执行 console.log 并且不会将值附加到 window。 是否有另一种方法来拦截 window 并将数据附加到 window 以便我的组件在测试运行时使用它?
如果 'window:before:load' 没有 运行,可能是您将该代码放在了规范的错误部分。
应该在访问之前,或者使用访问选项
cy.visit('...', {
onBeforeLoad: (win) => {
...
},
})
但我怀疑当时 Vue 可能没有设置 win.Aurora
,因为它需要先启动。
组件测试
使用Cypress组件测试器时,需要给一个{ attachTo: ... }
选项。
const win = cy.state('window')
win.Aurora = {
quickview: () => 'Aurora is mocked'
}
const wrapper = mount(MyComponent, {
attachTo: win
})
现在 window:before:load
事件也将触发。