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

如何在TestCafe的TypeScript项目中定义并使用全局钩子?

TestCafe TypeScript项目全局钩子配置解决方案

关于TS配置文件的问题

TestCafe目前暂不支持直接使用.ts格式的配置文件,官方仅识别.js/.cjs/.mjs这类JavaScript格式的配置文件,所以你遇到的不是操作失误,是当前版本的功能限制。

如何在TypeScript项目中使用全局钩子并引用自有代码

下面提供三种可行方案:

方案一:编译TS代码后在JS配置文件中引用

  1. 确保你的TypeScript代码已配置好编译输出(比如编译到dist目录)
  2. 在testcafe.config.js中直接引用编译后的JS文件:
const { MyCustomHook } = require('./dist/hooks/my-custom-hook.js');

module.exports = {
  hooks: {
    beforeTest: MyCustomHook.beforeTestHandler,
    afterTest: MyCustomHook.afterTestHandler,
    // 其他全局钩子...
  }
};

如果你的TS代码用ESModule语法,可将配置文件改为.mjs,并使用import替代require

方案二:用ts-node加载TS配置文件

  1. 安装ts-node依赖:
npm install ts-node --save-dev
  1. 创建testcafe.config.ts配置文件,直接编写TS代码并引用自有类/函数:
import { MyCustomHook } from './src/hooks/my-custom-hook.ts';

export default {
  hooks: {
    beforeTest: MyCustomHook.beforeTestHandler,
    afterTest: MyCustomHook.afterTestHandler,
    // 其他全局钩子...
  }
};
  1. 通过ts-node启动TestCafe加载配置:
npx ts-node node_modules/testcafe/bin/testcafe.js chrome tests/ --config-file testcafe.config.ts

可将命令写入package.json的scripts中,简化后续执行

方案三:用测试文件内的全局钩子替代配置文件钩子

如果不想折腾配置文件,可在测试代码中定义通用的fixture基类,统一挂载全局钩子:

// src/fixtures/base-fixture.ts
import { fixture } from 'testcafe';
import { MyCustomHook } from '../hooks/my-custom-hook.ts';

export const baseFixture = fixture('通用基础Fixture')
  .beforeEach(async t => {
    await MyCustomHook.beforeTestHandler(t);
  })
  .afterEach(async t => {
    await MyCustomHook.afterTestHandler(t);
  });

后续所有测试文件直接继承这个基类即可:

import { baseFixture } from '../fixtures/base-fixture.ts';

baseFixture.page('https://your-test-page.com')
  .test('示例测试', async t => {
    // 测试逻辑
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:15:40