typescript - Ako môžem nahradiť typ Jest expect typom Chai expect?
Chcem používať Chai ako knižnicu tvrdení namiesto tej od Jest. Používam TypeScript a chcel by som nahradiť globálne Jest expect typom Chai expect.
Snažím sa urobiť niečo takéto:
import chai from "chai";
type ChaiExpect = typeof chai.expect;
declare global {
export const expect: ChaiExpect;
}
global.expect = chai.expect;
Ale TypeScript sťažuje, pretože:
Cannot redeclare block-scoped variable 'expect'.ts(2451)
index.d.ts(39, 15): 'expect' was also declared here.
Ako môžem prepísať typ deklarovaný vo index.d.ts pre jest?
Odpoveď č. 1
Na strane JavaScriptu môžete znovu priradiť runtime hodnotu global.expect, na strane TypeScriptu však nie je jednoduché riešenie.
Jest deklaruje expect ako globálnu premennú (pozri @types/jest/index.d.ts(39, 15)). V súčasnosti TypeScript neposkytuje spôsob, ako prepísať typ už deklarovanej premennej v rovnakom blokovom rozsahu.
Takže pokiaľ si ponecháte @types/jest/index.d.ts tak, ako je, nič nemôžete urobiť, aby ste tento chybový hlásenie potlačili.
Riešenie
1. Ľahká cesta
Najjednoduchší spôsob, ako používať expect z balíka chai, je jednoducho ho importovať a používať v každom súbore .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)
});
2. Ťažkou cestou
A teraz, ak naozaj nemôžete žiť s tým opakujúcim sa riadkom import { expect } from 'chai', tu je náročnejšia cesta:
Presuňte
node_modules/@types/jestdotypes/jest, uistite sa, že v priečinkunode_modulesuž nie je. Tiež odstráňte "@types/jest" z "package.json => devDependencies".Upravte
types/jest/index.d.ts, nahraďte typexpecttypom z chai. Tento prispôsobený typ deklarácie musíte commitnúť do svojho git repozitára.
// index.d.ts
+ /// <reference types="chai" />
- declare const expect: Expect
+ declare const expect: Chai.ExpectStatic
- Vo vašom
tsconfig.jsonpridajte:
{
"compilerOptions": {
"typeRoots": ["node_modules/@types", "types"],
...
}
- Vytvorte
jestSetup.jsa pridajte tento jednoradový kód:
global.expect = require("chai").expect
- v
jest.config.jsnastav:
setupFilesAfterEnv: ['./jestSetup.js'],
// or `setupTestFrameworkScriptFile` for older version.
Tu to máš. Teraz môžeš používať chai expect priamo v globálnom rozsahu.
