Security News
ESLint is Now Language-Agnostic: Linting JSON, Markdown, and Beyond
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
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.
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
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 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 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 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.
From version "jest": "17.0.0"
we are using same MAJOR.MINOR as Jest
.
For "jest": "< 17.0.0"
use "ts-jest": "0.1.13"
. Docs for it see here.
To use this in your project, run:
npm install --save-dev ts-jest
Modify your project's package.json
so that the jest
section looks something like:
{
"jest": {
"transform": {
".(ts|tsx)": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
"moduleFileExtensions": [
"ts",
"tsx",
"js"
]
}
}
This setup should allow you to write Jest tests in Typescript and be able to locate errors without any additional gymnastics.
By default jest
does not provide code coverage remapping for transpiled codes, so if you'd like to have code coverage it needs additional coverage remapping. This can be done via writing custom processing script, or configure testResultsProcessor
to use built-in coverage remapping in ts-jest
.
{
"jest": {
"transform": {
".(ts|tsx)": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},
"testResultsProcessor": "<rootDir>/node_modules/ts-jest/coverageprocessor.js"
}
}
Notes:
- If you're experiencing remapping failure with source lookup, it may due to pre-created cache from
jest
. It can be manually deleted, or execute with--no-cache
to not use those.- Remapped reports will be copied to
remapped
directory in coverage directory (e.g.coverage/remapped
).
There is a few additional steps if you want to use it with React Native.
Install babel-jest
and babel-preset-react-native
modules.
npm install -D babel-jest babel-preset-react-native
Ensure .babelrc
contains:
{
"presets": ["react-native"]
}
In package.json
, inside jest
section, the transform
should be like this:
"transform": {
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
".(ts|tsx)": "<rootDir>/node_modules/ts-jest/preprocessor.js"
}
Fully completed jest section should look like this:
"jest": {
"preset": "react-native",
"transform": {
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
".(ts|tsx)": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
"moduleFileExtensions": [
"ts",
"tsx",
"js"
]
}
If only testing typescript files then remove the js
option in the testRegex.
By default this package will try to locate tsconfig.json
and use its compiler options for your .ts
and .tsx
files.
But you are able to override this behaviour and provide another path to your config for TypeScript by using __TS_CONFIG__
option in globals
for jest
:
{
"jest": {
"globals": {
"__TS_CONFIG__": "my-tsconfig.json"
}
}
}
Or even declare options for tsc
instead of using separate config, like this:
{
"jest": {
"globals": {
"__TS_CONFIG__": {
"module": "commonjs",
"jsx": "react"
}
}
}
}
Note that if you haven't explicitly set the module
property in the __TS_CONFIG__
setting (either directly or through a separate configuration file), it will be overwritten to commonjs
(regardless of the value in tsconfig.json
) since that is the format Jest expects. This only happens during testing.
When using Jest with Angular (a.k.a Angular 2) apps you will likely need to parse HTML templates. If you're unable to add html-loader
to webpack config (e.g. because you don't want to eject from angular-cli
) you can do so by defining __TRANSFORM_HTML__
key in globals
for jest
.
{
"jest": {
"globals": {
"__TRANSFORM_HTML__": true
}
}
}
You'll also need to extend your transform
regex with html
extension:
{
"jest": {
"transform": {
"^.+\\.(ts|tsx|js|html)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
}
}
}
For all available options see TypeScript docs.
"target": "ES6"
while using node v4
in your test environment;"jsx": "preserve"
for now (see progress of this issue);"baseUrl": "<path_to_your_sources>"
, you also have to change jest config
a little bit:"jest": {
"moduleDirectories": ["node_modules", "<path_to_your_sources>"]
}
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.
git clone https://github.com/kulshekhar/ts-jest
cd ts-jest
npm install
npm test
Note: If you are cloning on Windows, you may have to run git config --system core.longpaths true
for Windows to stop complaining about long filenames.
Copyright (c) Authors. This source code is licensed under the MIT license.
FAQs
A Jest transformer with source map support that lets you use Jest to test projects written in TypeScript
The npm package ts-jest receives a total of 11,311,149 weekly downloads. As such, ts-jest popularity was classified as popular.
We found that ts-jest demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Security News
Members Hub is conducting large-scale campaigns to artificially boost Discord server metrics, undermining community trust and platform integrity.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.