我的Jest setupTests
文件定义了许多全局标识符(例如global.sinon = sinon
,但是在环境声明中键入它们不仅适用于*.spec.ts
,而且适用于所有文件以前是通过为setupTests
目录创建单独的tsconfig.json
文件来解决此问题的,但是如果测试文件和非测试文件位于同一目录中,则无法实现。有什么办法可以使仅适用于特定文件名模式的环境声明呢?
tests
答案 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);
这很麻烦,但是我还没有找到更好的方法来为不同的文件提供不同的全局变量。通常,人们只是用他们可能拥有的所有全局变量(节点,浏览器,测试)来污染其全局命名空间。