我在TypeScript测试中用帮助器扩展了Chai。
import * as chai from 'chai';
chai.use((_chai) => {
let Assertion = _chai.Assertion;
Assertion.addMethod('sortedBy', function(property) {
// ...
});
});
const expect = chai.expect;
在同一文件测试用例中使用此方法:
expect(tasks).to.have.been.sortedBy('from');
编译器会给出错误" Property' sortedBy'在类型'断言'"。
上不存在如何将sortedBy
的声明添加到Chai.Assertion
?
我尝试添加模块声明,就像其他Chai插件模块一样,但它不起作用。
declare module Chai {
interface Assertion {
sortedBy(property: string): void;
}
}
我不想让帮助者成为一个单独的模块,因为它是微不足道的。
答案 0 :(得分:3)
尝试以下方法:
像这样在chaiExt.ts中扩展chai:
declare module Chai
{
export interface Assertion
{
sortedBy(property: string): void;
}
}
在chaiConsumer.ts中消费:
import * as chai from 'chai';
//...
chai.expect(tasks).to.have.been.sortedBy('from');
[编辑]
如果您使用'import' - 您将文件转换为外部模块并且不支持声明合并:link
答案 1 :(得分:0)
您的代码是正确的。默认情况下,模块和接口在TS上打开,因此您可以重新声明并扩充它们。
通常,我在这种情况下所做的是:我在与项目相同的文件夹中创建一个globals.d.ts文件,以便自动加载.d.ts,然后我添加你的类型定义。
declare module Chai {
interface Assertion {
sortedBy(property: string): void;
}
}