我正在为Google Optimize实验编写Cypress集成测试,我想存根gtag
库提供的实验变量值。
该值作为callback
的参数提供给此函数:
gtag('event', 'optimize.callback', {
name: '<experiment_id_A>',
callback: (value) => 'unknown',
});
我怎样才能截尾论点";值";?(不清除回调返回)
--
文件:
- 谷歌优化方法
- 柏树桩
- Sinon存根
我对gtag了解不多,但看看参考页面,如果您使用"外部";显示在该页面上的函数模式而不是";内联";函数。
在React或其他框架中存根内部函数的方法是在window
对象上公开它。
function implementExperimentA(value) {
if (value == '0') {
// Provide code for visitors in the original.
} else if (value == '1') {
// Provide code for visitors in first variant.
} else if (value == '2') {
// Provide code for visitors in section variant.
}
...
}
if (window.Cypress) {
// Cypress is active
console.log('referencing "implementExperimentA" on window')
window.implementExperimentA = implementExperimentA;
}
gtag('event', 'optimize.callback', {
name: '<experiment_id_A>',
callback: implementExperimentA
})
然后在测试中,您可以在beforeLoad事件中设置存根
cy.visit('http://localhost:3000', {
onBeforeLoad(win) {
// Stub your functions here
cy.stub(win, 'implementExperimentA').callsFake((realValue) => {
const mockValue = 'abc'
console.log(`implementExperimentA called with ${realValue}, subbing ${mockValue}`)
return window.implementExperimentA(mockValue)
})
},
})
这应该在页面加载的最早点实例化存根,前提是已经设置了引用。
检查console.log是否按正确的顺序启动,如果没有,则引用函数时可能会延迟,您可以使用cy.window()
选择存根点。
cy.visit('http://localhost:3000')
...
cy.window().then(win => {
// Stub your functions here
cy.stub(win, 'implementExperimentA').callsFake((realValue) => {
const mockValue = 'abc'
console.log(`implementExperimentA called with ${realValue}, subbing ${mockValue}`)
return window.implementExperimentA(mockValue)
})
})