仅将TypeScript环境声明添加到特定文件(例如* .spec.ts)

时间:2019-02-18 08:15:02

标签: typescript jestjs typescript-typings tsconfig

我的Jest setupTests文件定义了许多全局标识符(例如global.sinon = sinon,但是在环境声明中键入它们不仅适用于*.spec.ts,而且适用于所有文件以前是通过为setupTests目录创建单独的tsconfig.json文件来解决此问题的,但是如果测试文件和非测试文件位于同一目录中,则无法实现。有什么办法可以使仅适用于特定文件名模式的环境声明呢?

tests

1 个答案:

答案 0 :(得分:1)

您不能通过以下方法解决此问题:

declare module "*.spec.ts" {
  /* ... */
}

因为这是您描述所有*.spec.ts文件的内容的方式,而不是它们执行的环境。

最好将源代码与测试分开,并使用两个单独的tsconfig.json文件。如果必须将源代码和测试混合在一起,那么想到的唯一选择就是在所包含文件的外部创建声明文件 并将其手动导入每个测试文件中。例如,您可以在项目的根目录中创建一个名为environment的目录,然后在其中放置一个test.d.ts文件。

./environment/test.d.ts

declare const foo: string;

现在,每个依赖于全局foo的测试都需要引用environment/test.d.ts

./path/to/foo.spec.ts

import '../environment/test';

console.log(foo);

这很麻烦,但是我还没有找到更好的方法来为不同的文件提供不同的全局变量。通常,人们只是用他们可能拥有的所有全局变量(节点,浏览器,测试)来污染其全局命名空间。