My Jest setupTests
文件定义了一些全局标识符(如 global.sinon = sinon
,但在环境声明中键入它们适用于所有文件,而不仅仅是 *.spec.ts
其中包含 setupTests
文件。以前我通过为 单独的
目录,但如果测试文件和非测试文件位于同一目录中,那是不可能的。有没有办法让环境声明仅适用于特定的文件名模式?像这样:tsconfig.json
文件解决了这个>tests
declare module "*.spec.ts" {
// declarations here
}
最佳答案
你不能通过这样做来解决这个问题:
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);
这很麻烦,但我还没有找到更好的方法来为不同的文件提供不同的全局变量。通常,人们只是用他们可能拥有的所有全局变量(节点、浏览器、测试)污染了他们的全局命名空间。
关于typescript - 仅将 TypeScript 环境声明添加到特定文件(如 *.spec.ts),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54742923/