所以我试图开始使用TypeScript,但在将它安装到我的测试环境中时遇到了一些麻烦。
与许多人一样,我使用摩卡咖啡,柴,西农和西农柴。由于chai Expect和sinon本身被频繁使用,因此我更喜欢将它们视为我的测试环境的一部分,就像describe
,it
,context
,{{ 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
没有这些tsc
和expect
全局变量的概念。我当然可以为其他所有内容添加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
来更改名称空间。我真的不想在这样的东西上保持这样的叉子。