如何扩展Mocha的Context接口?

How to extend Mocha's Context interface?

采用以下代码片段:

import { Foo } from "./foo";

export interface MyContext extends Mocha.Context {
  foo: Foo;
}

这是在安装了 @types/mocha 包的项目中,因此编译器可以推断出 Mocha 命名空间。

现在,如果我尝试在测试套件中使用此接口:

import { MyContxt } from "../types/mocha";

describe("my test suite", function() {
  it("should do something", function(this: MyContext) {
    ...
  });
});

TypeScript 编译器抛出以下错误:

No overload matches this call.

我查了 source code,似乎 mocha 期望传递给 beforebeforeEachit 等的任何函数,挂钩链接到 @types/mocha 中定义的 Context 类型 - 它不接受任何后代类型。

如何解决这个问题并在我的测试环境中扩展 Mocha Context 接口?

使用该派生接口从字面上扩展 mocha 的 Context 类型不是您想在这里做的。相反,您想扩充库定义的类型,添加您的成员。

这可以通过以下方式完成:

// augmentations.d.ts
import {Foo} from './foo';

declare module "mocha" {
  export interface Context {
    foo: Foo;
  }
}

用法示例:

describe("my test suite", function () {
  it("should do something", function () {
    console.log(this.foo);
  });
});