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

使用Next.js动态路由时,Jest无法找到路径含括号的测试文件

解决Next.js动态路由路径下Jest无法识别测试文件的问题

问题出在Jest的glob匹配规则上:路径里的[和]是glob的特殊通配符(用来匹配字符集),所以pages/projects/[group]/[project]/MyTest.test.tsx里的括号会被Jest当成匹配规则,而不是路径的一部分,导致匹配失败。

下面是几个可行的解决办法:

  • 转义glob里的括号
    在jest.config.js的testMatch中,用双重反斜杠转义括号(因为JS字符串需要先转义反斜杠),同时保留原有匹配规则覆盖其他测试文件:

    module.exports = {
      testMatch: [
        '**/\\[*\\]/?(*.)+(test).ts?(x)',
        '**/?(*.)+(test).ts?(x)'
      ],
      // 其他配置...
    };
    

    这里\\[*\\]会匹配任意带括号的目录,比如[group]、[project],确保这类目录下的测试文件能被扫描到。

  • 改用testRegex正则匹配
    相比glob,正则表达式可以更精准处理字面量括号,替换testMatch为testRegex:

    module.exports = {
      testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$',
      testPathIgnorePatterns: ['/node_modules/'],
      // 其他配置...
    };
    

    这个正则会直接匹配文件名里的test或spec后缀,不管目录结构里的特殊字符。

  • 调整测试文件位置
    如果项目允许,把测试文件移到pages目录外的__tests__文件夹,比如__tests__/projects/[group]/[project]/MyTest.test.tsx,然后在jest.config.js里添加对应匹配规则:

    module.exports = {
      testMatch: ['**/__tests__/**/*.(test|spec).ts?(x)'],
      // 其他配置...
    };
    

    这种方式避开了pages目录下动态路由的括号路径问题,也是Next.js项目常用的测试文件组织方式。

验证配置是否生效可以运行:

npx jest --debug

查看输出里的testMatch/testRegex配置,以及Candidate modules部分,确认目标测试文件是否被Jest识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:05:54