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')
}
...
}
