jestjs - bruke jest + typescript i monorepo


Jeg prøver for øyeblikket å bruke jest i et Typescript-monorepo (ikke Lerna eller noe annet, bare baseURL og paths, også, ikke mitt valg) og en av filene jeg tester importerer noe fra monorepoet.

import {publish, subscribe} from "message-bus"

Nå i min tsconfig.json har jeg:

...
    "compilerOptions": {
        "baseUrl": "./packages",
        "paths": {
            "message-bus":["message-bus/src"],
        }, 
...

og i pakken jest.config.js:

module.exports = {
...
  preset: 'ts-jest',
  moduleNameMapper: {
    '^message-bus/(.*)$': "../message-bus/src/$1"
  }
...
}

Selv med alt dette på plass klager jest over at den ikke finner modulen message-bus. Kan du hjelpe meg med å fikse konfigurasjonen min?

Svar #1

Forutsatt at din jest.config.js ligger i roten av pakken din og ikke i monorepoen, trenger du moduleNameMapper for å danne en sti som kan forstås fra hvilken som helst plassering. Du gjør dette ved å starte med katalogen som jest.config.js-filen ligger i, og deretter bygge stien din derfra. Dette vil lage en absolutt sti til din mapped modul.

Du trenger også skråstreken (/) i regex-fangstgruppen din fordi den ikke alltid er i banen.

const path = require('path');

module.exports = {
  ...
  preset: 'ts-jest',
  moduleNameMapper: {
    '^message-bus(.*)$': path.join(__dirname, '../message-bus/src$1')
  }
  ...
}

Relaterte artikler