在Cypress测试中,如何截断函数的参数



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

相关内容

  • 没有找到相关文章

最新更新