如何扩展Mocha的Context接口?

Pau*_*erg 3 types mocha.js typescript

采取以下代码片段:

import { Foo } from "./foo";

export interface MyContext extends Mocha.Context {
  foo: Foo;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

TypeScript 编译器抛出以下错误:

没有重载与此调用匹配。

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

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

Alu*_*dad 7

使用该派生接口从字面上扩展 mocha 的Context类型并不是您想要在此处执行的操作。相反,您想要扩充库定义的类型,添加您的成员。

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

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

declare module "mocha" {
  export interface Context {
    foo: Foo;
  }
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

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