首页 > 解决方案 > 将数据从一个步骤同步传递到下一个步骤

问题描述

使用 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 的限制吗?

标签: cucumberjscypress

解决方案


我设法让它通过以下方式工作:

  1. 将 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]
        },
      })
  1. 然后你可以在任何测试中添加一个变量并在任何其他地方访问它:
it('test', ()=>{
   cy.task('pushValue', { name: 'orderNumber', value: orderNumber })
})
it('test 2', ()=>{
    cy.task('getValue', 'orderNumber').then((order) => {
      cy.visit(`/bookings/${order}`)
    })   
})

推荐阅读