【发布时间】:2020-06-09 23:04:12
【问题描述】:
我正在使用 delayed root suite 功能在我的 mocha 测试中初始化一些异步数据。
在我最顶层的beforeEach 中,我正在创建一些具有特定类型的对象并将它们存储在this 对象中。在it 套件的子测试文件中,我使用this 来避免重复代码无数次,但这样做会丢失打字:
it("should do something", async function() {
await this.token.approve(account, amount);
});
为了取回它们(尤其是自动完成功能),我必须添加一行额外的代码:
const token: Erc20 = this.token;
await token.approve(account, amount);
我知道我可以通过使用括号进行强制转换来内联,但我不想这样做。
有没有办法为所有测试套件函数的“this”所有者对象定义类型?
【问题讨论】:
-
我认为 TypeScript 的标准做法是使用词法范围,例如github.com/mochajs/mocha/issues/2245#issuecomment-218321301.
-
你可以使用declaration merging来扩展Mocha的
this类型。但这将为 all Mocha 测试声明属性,而不仅仅是该文件中的那些。 -
使用词法范围,我必须通过函数参数传递一个 bajillion 变量。此外,正如 GitHub 用户 iknowcss 在他的 comment 中所说的那样,这个解决方案还有其他缺点。
-
啊,“词法范围”是指在封闭范围内声明一个变量并分配给/从中读取。这也是 iknowcss 支持的。
标签: typescript types mocha.js this