tyypit - Kuinka voin tuoda Chai 'expect()' -funktion globaalisti TypeScriptissä?


Muita aiheeseen liittyviä kysymyksiä kysytään vain JavaScriptistä, mutta tiedän, että Chai-tiimi on jo tarjonnut 'chai/register-expect' jne..

Siirryin Jestistä Chaihin, ja kun käytin Jestia, se tehtiin yksinkertaisesti kirjoittamalla 'jest' kenttään "types" tiedostossa tsconfig.json. Sitten expect-funktioon viitattiin automaattisesti @types/jest index.d.ts avulla.

Mutta @types/chai tai Chai eivät tue tätä. Ja he suosittelevat, ennen kuin raportoit ongelman, julkaisemaan Stack Overflowssa. Mitä ihmettä, eikö vain?

Kun olin surffaamassa tästä, tajusin, että kaikki tuovat 'expect'-funktion tiedostoa kohden, kuten TypeORM tai muut TypeScript-projektit... Voi luoja, se on niin kamalallllllaa.

Miksi ihmeessä minun pitäisi tuoda expect() tiedostoa kohden? Eikö ole mitään tapaa välttää sitä?

Voin palata Jestiin, mutta tuo suorituskyky on niin hirvittävää ulostetta. On parempi tuoda expects kaikille tiedostoille.

mocha -r chai/register-expect ei toimi myöskään.

Olin testaamassa:

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

Tässä on minun tsconfig.json-tiedostoni.

{
    "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"
    ]
}

Vastaus #1

chai/register-expect rekisteröi globaalin Chai-funktion expect.

Sinun täytyy selittää TypeScript-kääntäjällesi, että sinulla on se luomalla mukautettu määrittelytiedosto.

Luo hakemistorakenne:

typings
    global
       index.d.ts

Lisää seuraava index.d.ts-tiedostoosi:

declare const expect: Chai.ExpectStatic

Nyt tsconfig.json-tiedostosi pitäisi olla jotakin tällaista:

    "typeRoots": [
      "node_modules/@types", "./typings"
    ],
    "types": [
      "mocha",
      "chai",
      "node",
      "global"
    ]

Huomaa typings-hakemisto ja global-moduulin tuonti.

Tämä on tarpeen, koska ts-node ei yleensä välitä mukautetuista tyypeistäsi.

Aiheeseen liittyviä artikkeleita