如何扩展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 期望传递给 before
、beforeEach
、it
等的任何函数,挂钩链接到 @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);
});
});
采用以下代码片段:
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 期望传递给 before
、beforeEach
、it
等的任何函数,挂钩链接到 @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);
});
});