You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Typescript中Cucumber测试类间动态传值出现undefined问题求助

问题原因

你在YYY类里新建了一个XXX实例,这个实例和执行Given I set some value步骤的XXX实例是完全独立的两个对象——前者从未执行过getInfoData()方法,自然searchedValue会是undefined。

解决方案

方案1:用Cucumber共享上下文(World)传递实例(推荐)

Cucumber提供了World机制来共享测试上下文,让所有步骤类共用同一个实例:

1. 定义自定义World

import { setWorldConstructor } from '@cucumber/cucumber';
import { XXX } from './xxx';

class TestWorld {
  xxxInstance: XXX;

  constructor() {
    this.xxxInstance = new XXX();
  }
}

setWorldConstructor(TestWorld);

2. 修改XXX类的步骤方法

import { Given } from '@cucumber/cucumber';
import { TestWorld } from './test-world';

export class XXX {
  searchedValue: string;

  @given("I set some value")     
  public async getInfoData(this: TestWorld){
    // 操作World里的共享XXX实例
    this.xxxInstance.searchedValue = await getData.getPlayersId();
  }
}

3. 修改YYY类的步骤方法

import { Then } from '@cucumber/cucumber';
import { TestWorld } from './test-world';

export class YYY {
  @then("I print it")
  public async showData(this: TestWorld){
    // 直接从World获取已赋值的实例
    console.log(this.xxxInstance.searchedValue);
    // 注意:searchedValue是字符串,不需要await
  }
}

方案2:用全局存储对象传递数据(适合小型项目)

如果项目规模小,也可以用一个全局对象来存储共享数据:

1. 创建全局存储文件

// test-context.ts
export const testContext = {
  searchedValue: ''
};

2. 修改XXX类

import { given } from '@cucumber/cucumber';
import { testContext } from './test-context';

export class XXX {
  @given("I set some value")     
  public async getInfoData(){
    testContext.searchedValue = await getData.getPlayersId();
  }
}

3. 修改YYY类

import { then } from '@cucumber/cucumber';
import { testContext } from './test-context';

export class YYY {
  @then("I print it")
  public async showData(){
    console.log(testContext.searchedValue);
  }
}
额外注意
  • 你之前写的await xxx.searchedValue是多余的:searchedValue是字符串类型,不是Promise,不需要用await。
  • 确保你的@cucumber/cucumber版本在v7及以上,才能支持World构造器功能。

内容的提问来源于stack exchange,提问作者EdXX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:37:44