Dav*_*vet 2 chai typescript jestjs
我想使用 Chai 作为断言库,而不是 Jest。我使用打字稿,我想用 Chai 期望的类型替换全局 Jest 期望。
我尝试做类似的事情:
import chai from "chai";
type ChaiExpect = typeof chai.expect;
declare global {
export const expect: ChaiExpect;
}
global.expect = chai.expect;
Run Code Online (Sandbox Code Playgroud)
但打字稿抱怨是因为:
Cannot redeclare block-scoped variable 'expect'.ts(2451)
index.d.ts(39, 15): 'expect' was also declared here.
Run Code Online (Sandbox Code Playgroud)
如何覆盖 jest 内部index.d.ts声明的类型?
您可以在 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)
});
Run Code Online (Sandbox Code Playgroud)
现在,如果你真的无法忍受那条重复的import { expect } from 'chai'线,这里有一条更难的路:
移至,确保它已消失在文件夹node_modules/@types/jest中。还要从“package.json => devDependencies”中删除“@types/jest”。types/jestnode_modules
修改types/jest/index.d.ts,将 的类型替换expect为 chai 的。您需要将此自定义类型声明提交到您的 git 存储库。
// index.d.ts
+ /// <reference types="chai" />
- declare const expect: Expect
+ declare const expect: Chai.ExpectStatic
Run Code Online (Sandbox Code Playgroud)
tsconfig.json,添加:{
"compilerOptions": {
"typeRoots": ["node_modules/@types", "types"],
...
}
Run Code Online (Sandbox Code Playgroud)
jestSetup.js并添加这一行:global.expect = require("chai").expect
Run Code Online (Sandbox Code Playgroud)
jest.config.js,设置:setupFilesAfterEnv: ['./jestSetup.js'],
// or `setupTestFrameworkScriptFile` for older version.
Run Code Online (Sandbox Code Playgroud)
就这样吧。expect您现在可以在全局范围内使用 chai 。
| 归档时间: |
|
| 查看次数: |
2580 次 |
| 最近记录: |