如何在CodeceptJs+Cucumber的Before钩子中获取场景名称
CodeceptJS在Before钩子中获取Cucumber场景名称的实现方案
问题描述
搭配Cucumber helper使用CodeceptJS时,出于报表配置需求需要在Before区块获取当前Scenario名称,编写如下代码后控制台无相关日志输出,无法拿到目标场景名:
Before(() => { console.log(Scenario.name) });
正确实现方式
Before钩子的回调支持接收运行时注入的上下文参数,当前执行的场景信息会通过参数传入,直接从参数中取值即可。不要直接访问全局的Scenario对象——该对象是步骤定义阶段的构造对象,不是运行时的当前场景实例,无法拿到动态的场景名称。
- 基础写法(适配大多数稳定版本)
Before((scenario) => { // 直接打印当前场景名称 console.log(scenario.name); });
- 新版本兼容写法(适配CodeceptJS 3.x + Cucumber 6+ 版本)
如果上述写法拿不到值,可以从注入的currentTest属性上取值:
Before(({ currentTest }) => { // 不同版本字段名略有差异,做兼容处理即可 const scenarioName = currentTest.title ?? currentTest.name; console.log(scenarioName); });
排错提示:如果写完还是没有日志输出,先确认你的Before钩子是写在Cucumber的step_definitions目录下的对应文件中,不要写在普通的CodeceptJS helper配置里,否则钩子不会被Cucumber运行时识别触发。
内容的提问来源于stack exchange,提问作者Aleksandar Dermendzhi
相关产品推荐
相关产品推荐

