tipuri - Cum pot să import funcția Chai 'expect()' la nivel global în TypeScript?
Alte întrebări legate sunt doar despre JavaScript, dar știu că echipa Chai a furnizat deja 'chai/register-expect', etc..
Migram de la Jest la Chai, și când foloseam Jest, se făcea pur și simplu tastând 'jest' în câmpul „types” din fișierul tsconfig.json. Apoi funcția expect era referită automat cu @types/jest index.d.ts.
Dar @types/chai sau Chai nu suportă asta. Și ei recomandă, înainte de a raporta o problemă, să postezi pe Stack Overflow. Ce naiba, nu-i așa?
După ce am cercetat despre asta, îmi dau seama că toată lumea importă funcția 'expect' în fiecare fișier, ca în TypeORM sau alte proiecte TypeScript... Doamne, este atât de îngrozitor.
De ce naiba ar trebui să import expect() în fiecare fișier? Nu există o modalitate de a evita asta?
Pot să mă întorc la Jest, dar acea performanță este o mizerie oribilă. Este mai bine să importăm expects pentru toate fișierele.
mocha -r chai/register-expect nu funcționează niciodată.
Testam:
npx mocha -r node_modules/ts-node/register/transpile-only -r chai/register-expect -r ts-node/register -r tsconfig-paths/register some.test.ts
Iată fișierul meu tsconfig.json.
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true,
"target": "es5",
"noImplicitAny": false,
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist",
"baseUrl": "src",
"skipLibCheck": true,
"downlevelIteration" : true,
"paths": {
... bla bla
"main/*" : [
"main/*"
],
"controllers/*" : [
"main/controllers/*"
],
"middleware/*" : [
"main/middleware/*"
],
"*": [
"node_modules/*"
]
},
"types" : [
"node",
"mocha",
"chai"
],
"typeRoots": [
"node_modules/@types",
"types"
],
"lib": [
"es2017",
"dom"
],
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"resolveJsonModule" : true
},
"exclude": [
"node_modules"
],
"include": [
"src/**/*.ts",
"**/*.test.ts"
]
}
Răspuns #1
chai/register-expect va înregistra o funcție globală Chai expect.
Trebuie să explici compilatorului tău TypeScript că îl ai prin crearea unui fișier de definiții personalizat.
Creează o structură de directoare:
typings
global
index.d.ts
În fișierul tău index.d.ts, adaugă următoarele:
declare const expect: Chai.ExpectStatic
Acum fișierul tău tsconfig.json ar trebui să fie ceva de genul acesta:
"typeRoots": [
"node_modules/@types", "./typings"
],
"types": [
"mocha",
"chai",
"node",
"global"
]
Observați directorul typings și importul modulului global.
Acest lucru este necesar deoarece ts-node, în general, nu ține cont de tipările tale personalizate.
