如何解决cucumber-js-tsflow中Before/After Hooks不生效问题?
解决cucumber-js-tsflow Hooks不生效的问题
我之前也碰到过完全一样的情况!当时折腾了好一阵才把问题搞定,给你几个排查方向,应该能解决:
1. 检查Cucumber配置文件的路径配置
这是最常见的原因——Cucumber根本没找到你的Hooks类!你需要确保cucumber.js配置文件里的require数组包含了features/support目录下的所有TypeScript文件。比如我的配置是这样的:
module.exports = { default: { require: [ 'features/support/**/*.ts', 'features/step-definitions/**/*.ts' ], requireModule: ['ts-node/register'] } };
如果你的配置里只加了步骤定义的路径,没加support目录,那Hooks类就不会被加载,自然不会执行。
2. 尝试将钩子方法改为非静态方法
虽然官方文档里说静态方法也支持,但我之前用某些版本的cucumber-js-tsflow时,静态钩子就是不生效,改成实例方法就好了。你可以试试修改代码:
import { binding, before, after } from 'cucumber-tsflow'; @binding() export class Hooks { @before() public logMessageToConsoleBeforeTestRun(): void { console.log('Before test message.'); } @after() public logMessageToConsoleAfterTestRun(): void { console.log('After test message.'); } }
去掉static关键字,让方法成为类的实例方法,有时候就能触发钩子了。
3. 确认依赖版本兼容性
cucumber-js和cucumber-js-tsflow的版本匹配很重要!如果你的cucumber-js是v8及以上的新版本,而cucumber-js-tsflow版本太旧,就会出现兼容性问题。我当时是把版本降到了兼容的组合:
npm install cucumber@7.x cucumber-js-tsflow@4.x --save-dev
你可以去cucumber-js-tsflow的仓库看看最新的版本兼容说明,确保两者版本匹配。
4. 直接在运行命令中指定require路径
如果配置文件没生效,你可以试试在运行测试的命令里直接指定要加载的文件路径,比如:
npx cucumber-js features/ --require features/support/**/*.ts --require features/step-definitions/**/*.ts --require-module ts-node/register
这样能强制Cucumber加载support目录下的Hooks文件,排除配置文件的问题。
先从第一个配置文件的检查开始,这大概率是问题所在!
内容的提问来源于stack exchange,提问作者GarethG
相关产品推荐
相关产品推荐

