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

TypeScript项目如何限制Mocha的describe、it等函数仅在test文件夹使用

可行实现方案

方案1:拆分TypeScript类型声明配置

  • 你当前全项目可调用mocha全局函数,大概率是把@types/mocha的类型声明设为了全局引入,只要拆分两套tsconfig配置即可解决:
    1. 项目根目录的主tsconfig.json(给src源码目录使用),移除compilerOptions.types中的mocha配置,确保源码目录编译时不会加载mocha的全局类型声明
    // 根目录tsconfig.json
    {
      "compilerOptions": {
        // 其余原有配置保持不变
        "types": ["node"] // 此处删掉mocha的全局类型引入
      },
      "include": ["src/**/*"],
      "exclude": ["test/**/*"]
    }
    
    1. 单独给test目录新增tsconfig.test.json,专门指定加载mocha的类型声明
    // test目录下的tsconfig.test.json
    {
      "extends": "../tsconfig.json",
      "compilerOptions": {
        "types": ["mocha", "node"]
      },
      "include": ["./**/*"]
    }
    
    1. 调整测试运行命令的参数,比如用mocha运行TS测试时加上--require ts-node/register --project test/tsconfig.test.json,即可实现测试目录正常识别mocha全局函数,src目录调用这些函数时TS会直接抛出类型错误。

方案2:用ESLint规则做强制校验

  • 可以作为TS配置的补充,从代码规范层面直接拦截不符合要求的调用:
    1. 直接用ESLint内置的no-restricted-globals规则,在根目录的ESLint配置文件中按目录加规则限制:
    // .eslintrc.js
    module.exports = {
      // 其余基础配置保持不变
      overrides: [
        {
          files: ['src/**/*.{ts,js}'],
          rules: {
            'no-restricted-globals': ['error', 'describe', 'it', 'before', 'beforeEach', 'after', 'afterEach']
          }
        },
        {
          files: ['test/**/*.{ts,js}'],
          rules: {
            'no-restricted-globals': 'off'
          }
        }
      ]
    }
    
    1. 把ESLint校验加入CI流程或者git pre-commit钩子,只要src目录出现这些测试函数的调用,直接阻断提交/构建。

方案3:构建兜底校验(可选)

如果担心有人绕过静态校验把测试函数的调用打包上线,可以在构建脚本里加一步全局检索,用grep或者自定义脚本扫描src目录下的代码,只要出现describe(、it(这类特征字符串就终止构建,作为最后一道兜底。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:36:04