我想使用Chai而不是Jest作为断言库。我使用打字稿,我想用Chai Expect类型代替global Jest Expect。
我尝试做类似的事情:
import chai from "chai";
type ChaiExpect = typeof chai.expect;
declare global {
export const expect: ChaiExpect;
}
global.expect = chai.expect;
但是打字稿抱怨是因为:
Cannot redeclare block-scoped variable 'expect'.ts(2451)
index.d.ts(39, 15): 'expect' was also declared here.
如何覆盖在玩笑的index.d.ts
中声明的类型?
答案 0 :(得分:2)
您可以在JavaScript方面(在打字稿方面)重新分配global.expect
的运行时值。
Jest将expect
声明为全局变量(请参见@types/jest/index.d.ts(39, 15)
)。当前,打字稿无法提供在同一块范围内覆盖已声明的变量类型的方法。
只要您保持@types/jest/index.d.ts
的状态,就无法采取任何措施来抑制该错误。
使用chai的expect
的最简单方法是简单地将其导入并在每个.test.ts
文件中使用:
// sum.test.ts
import { expect } from 'chai'
import { sum } from './sum';
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).eq(3)
});
现在,如果您真的不能忍受重复的import { expect } from 'chai'
行,这是更困难的路径:
将node_modules/@types/jest
移至types/jest
,确保已将其移至node_modules
文件夹中。还要从“ package.json => devDependencies”中删除“ @ types / jest”。
修改types/jest/index.d.ts
,将expect
的类型替换为chai。您需要将此自定义类型声明提交到git repo。
// index.d.ts
+ /// <reference types="chai" />
- declare const expect: Expect
+ declare const expect: Chai.ExpectStatic
tsconfig.json
中,添加:{
"compilerOptions": {
"typeRoots": ["node_modules/@types", "types"],
...
}
jestSetup.js
并添加此单行代码:global.expect = require("chai").expect
jest.config.js
中,设置:setupFilesAfterEnv: ['./jestSetup.js'],
// or `setupTestFrameworkScriptFile` for older version.
你去了。现在,您可以在全局范围内直接使用chai expect
。