解决打字稿中的名称空间/全局变量冲突

时间:2019-05-20 15:21:20

标签: typescript sinon

所以我试图开始使用TypeScript,但在将它安装到我的测试环境中时遇到了一些麻烦。

与许多人一样,我使用摩卡咖啡,柴,西农和西农柴。由于chai Expect和sinon本身被频繁使用,因此我更喜欢将它们视为我的测试环境的一部分,就像describeitcontext,{{ 1}}等。

通常,我在测试中包括一个类似于以下内容的安装文件:

beforeEach

这添加了sinon chai断言,为我提供了import chai from 'chai'; import sinon from 'sinon'; import sinonChai from 'sinon-chai'; chai.use(sinonChai); global.expect = chai.expect; global.sinon = sinon; afterEach(function() { sinon.restore(); }); expect的全局变量,还确保了每次测试后都可以恢复任何sinon伪造品。

当我开始用TypeScript编写测试文件时,这里的第一个问题是sinon没有这些tscexpect全局变量的概念。我当然可以为其他所有内容添加sinon软件包,但是我需要以某种方式为自己声明这两个全局变量,或者@types抱怨。

我尝试添加包含以下内容的tsc

test-globals.d.ts

这对于declare const expect: Chai.ExpectStatic; declare const sinon: Sinon.SinonStatic; 来说很好用,但对于expect来说却不是,因为sinon出于任何原因都使用小写的“ S”公开其名称空间。所以我必须将其切换为此:

@types/sinon

但是现在,新的全局变量似乎在名称空间的阴影下,所以它吐出了declare const expect: Chai.ExpectStatic; declare const sinon: sinon.SinonStatic;

如果像这样在声明全局变量之前尝试对其别名:

cannot find namespace 'sinon'

still 似乎遮盖了名称空间,并在第一行给了我type SinonStatic = sinon.SinonStatic; declare const expect: Chai.ExpectStatic; declare const sinon: SinonStatic;

如果我尝试使用cannot find namespace 'sinon'语句作为别名,那么这当然会导致import将我的文件视为模块,并拒绝遵守其中的全局声明,除非我包括其中的一个愚蠢的声明我所有测试文件中的tsc指令。

我似乎能够解决这个问题的唯一方法是,将全局///变量称为其他名称,或者仅将sinon导入每个测试文件中。

我可能最终会做后者,但是令我烦恼的是我似乎对此没有控制权。是我缺少的东西,还是这两个选项确实是我唯一的解决方案?

我正在优先排除叉sinon来更改名称空间。我真的不想在这样的东西上保持这样的叉子。

0 个答案:

没有答案