What is ts-jest?
ts-jest is an npm package that allows users to run tests written in TypeScript directly, without having to precompile them to JavaScript. It is a Jest transformer with source map support that lets you use Jest to test projects written in TypeScript.
What are ts-jest's main functionalities?
TypeScript testing
This feature allows you to write Jest tests in TypeScript. The code sample demonstrates a simple test for a sum function.
import sum from './sum';
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
Source map support
Source map support for accurate stack traces in error messages, which is useful for debugging tests.
/* Source maps are automatically handled by ts-jest, so there's no specific code sample for this feature. It works under the hood to provide accurate stack traces in your tests. */
TypeScript configuration
Allows you to use your project's TypeScript configuration or specify a custom one for testing purposes.
/* ts-jest uses the tsconfig.json file in your project to understand how to compile your TypeScript code. You can also specify a different configuration file for ts-jest if needed. */
Coverage reports
Integrates with Jest's coverage reporting to include TypeScript files in coverage statistics.
/* To collect coverage, you can use Jest's built-in coverage collection feature with ts-jest. */
jest --coverage
Other packages similar to ts-jest
babel-jest
babel-jest is a Jest plugin that allows you to use Babel to transform your JavaScript code. It is similar to ts-jest but is focused on JavaScript with Babel transformations rather than TypeScript.
jest
Jest itself is a testing framework that can work with TypeScript when configured with the appropriate preprocessor (like ts-jest). It provides the overall testing framework that ts-jest plugs into.
mocha
Mocha is another testing framework that can be used with TypeScript when combined with a TypeScript compiler like ts-node. It is an alternative to Jest and thus to ts-jest, but it requires additional setup for working with TypeScript.
karma-typescript
karma-typescript is a Karma plugin that compiles and bundles TypeScript on the fly. It is similar to ts-jest in that it allows for testing TypeScript code, but it is designed to work within the Karma test runner ecosystem.
typescript-jest
Note: This is currently just a hack and most likely not suitable for all setups.
Details
This repo uses code from the source-map-support package to show errors with mapped locations.
To use this in its current form, clone this repo anywhere on your disk. Run npm install
in it.
Create a symlink in the node_modules
directory of your project to this directory:
ln -s path-to-typescript-jest
such that you effectively have a node_modules/typescript-jest
directory.
Modify your project's package.json
so that the jest
section looks something like:
{
"jest": {
"scriptPreprocessor": "<rootDir>/node_modules/typescript-jest/preprocessor.js",
"testFileExtensions": [
"ts",
"tsx",
"js"
],
"moduleFileExtensions": [
"ts",
"tsx",
"js"
],
"unmockedModulePathPatterns": [
"<rootDir>/node_modules/react/",
"<rootDir>/node_modules/react-dom/",
"<rootDir>/node_modules/react-addons-test-utils/",
"<rootDir>/node_modules/typescript-jest/"
],
"globals": {
"__TS_CONFIG__": {
"module": "commonjs",
"jsx": "react"
}
}
}
}
This should allow you to write Jest tests in Typescript and be able to locate errors without any additional gymnastics.
If you have any suggestions/pull requests to turn this into a useful package, just open an issue and I'll be happy to work with you to improve this.
Quickstart to run tests
git clone https://github.com/kulshekhar/typescript-jest
cd typescript-jest
npm install
./test-init.sh
npm test
It is assumed that typescript
and jest-cli
are globally installed. If not, please do so:
npm i -g typescript jest-cli