cucumberjs - 将数据从一个步骤同步传递到下一个步骤
问题描述
使用 cypress-cucumber-preprocessor 1.5.1 运行 Cypress 3.1.1。我需要将一些静态数据从一个步骤传递到另一个步骤(在相同的场景/测试中)。我可以使用别名来执行此操作,例如:
cy.wrap(someString).as('myString')
,但是我必须异步访问它:
cy.get('@myString').then(myString => ...)
这相当麻烦,特别是当我必须传递多个值时,需要多个包装的闭包,而没有明显的好处。(目前我正在通过给对象起别名来解决这个问题,但我不需要这样做。)
如何将原始值从一个步骤同步传递到另一个步骤?
我想我可以简单地设置this.myString=''
为在 Mocha 共享上下文对象上设置值,但在这种情况下,该属性存在,但在后续步骤中访问时设置为未定义。
即使在步骤定义之外使用 let 创建我自己的上下文变量也不起作用。这仅仅是赛普拉斯和/或 cypress-cucumber-preprocessor 的限制吗?
解决方案
我设法让它通过以下方式工作:
- 将 2 个任务添加到 /plugins/index.js
const testStore = {}
module.exports = (on, config) => {
on('task', {
pushValue({ name, value }) {
console.log(name, value)
testStore[name] = value
console.log(testStore)
return true
},
})
on('task', {
getValue(name) {
return testStore[name]
},
})
- 然后你可以在任何测试中添加一个变量并在任何其他地方访问它:
it('test', ()=>{
cy.task('pushValue', { name: 'orderNumber', value: orderNumber })
})
it('test 2', ()=>{
cy.task('getValue', 'orderNumber').then((order) => {
cy.visit(`/bookings/${order}`)
})
})
推荐阅读
- excel-formula - 在 Excel 中的两个表中将 SUMIFS 转换为 SUBTOTAL
- r - 从未命名为 app.R 的文件中获得闪亮的负载
- twilio - 如何使用 Twilio 功能将呼叫转移到带有分机的电话号码?
- clojure - 如何在特定的reitit路线上应用环形防伪?
- php - 在 golang 中读取 *.wav 文件
- c# - 字典查找我们希望字符串中包含的键的位置
- frameworks - Bootstrap中的导航栏打开,但在移动设备上没有关闭
- c# - 从另一个应用程序访问控制台应用程序的屏幕缓冲区 (C#)
- cassandra - Cassandra vnodes 副本
- python - 如何让while循环识别它是文件的结尾