08 March, 2020
npm i -D jest typescript ts-jest @types/jest serve onchange @types/node @types/jest source-map-support @types/source-map-support
The official docs: https://jestjs.io/docs/en/getting-started
To get info about your install run:
js>npx envinfo --preset jest
add config file js>jest.config.js
module.exports = {
preset: 'ts-jest',
// The test environment that will be used for testing
testEnvironment: "node",
roots: [
"<rootDir>"
],
"modulePaths": [
"<rootDir>",
],
"moduleDirectories": [
"node_modules"
],
testMatch: [
"**/__tests__/**/*.+(ts|tsx|js)",
"**/__tests__/**/?(*.)+(spec|test).+(ts|tsx|js)",
"**/?(*.)+(spec|test).+(ts|tsx|js)"
],
transform: {
"^.+\\.(ts|tsx)$": "ts-jest",
"^.+\\.(js|jsx|ts)$": "babel-jest"
},
coverageReporters: ['json', 'lcov', 'text', 'clover']
No tests found, exiting with code 1
the js>roots
is where the test files are located.
If you get this error then change roots to jest knows where your test files are.
For example, Its common to have a directory tests with all your tests and for your code to be in a src directory so your config would look like this:
{
roots: ["<rootDir>/src/", "<rootDir>/__tests__/"],
}
In you package.json add a test command so you can run your tests with js>npm run test
"scripts": {
"test": "jest --coverage",
"test:watch": "jest --coverage --watchAll",
"view:coverage": "serve coverage/lcov-report",
"clean": "rm -rf coverage /**/*.js src/**/*.map",
"tsc": "tsc",
"build:watch": "onchange '**/*.ts' -- npm run tsc"
},
my tsconfig.js file looks like this
{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": true, // To generate source maps during compilation
"noImplicitAny": false,
"module": "commonjs",
"target": "es6",
"jsx": "react",
"skipLibCheck": true
}
}
tests
if this exists with a 0 then all is well.
and finally create your first test
mytest.test.ts
expect(1+1).toBe(1);
});
You might find it helpful to have open threes console windows with each running:
npm run test:watch
This automatically runs all the tests on every file save. Very important to re-test your application on every change, especially with TypeScript, as the purpose of following types through a large application is what TS is good at.npm run build:watch
Have tsc running after every save as well. Used for a CICD set to transpile the TS to JS. This is configured by the tsconfig.json file.npm run start
This starts the app. Since we added a module called source-map-support, our error messages will reflect our TS line of code.