If you are using jest
to write JavaScript/TypeScript tests like this one:
and you’re looking for how to show their results in TeamCity as follows:
Then this article will help you configure that ?
Prerequisites
To run jest
tests on TeamCity, you need to use jest as your testing framework of course ? If you use TypeScript – which I definitely recommend – ts-jest package will also be useful.
Having these packages installed, your basic jest.config.js
file should look similar to this:
You should also have a test
script defined in scripts
section of your package.json
file:
With this setup, you are able to execute your tests with npm test
command and see the results in the console:
Such tests results are however not recognized in any way by TeamCity build server. Let’s see how to configure that.
Installing TeamCity reporter
In order to see the tests results in TeamCity, we need the npm test
command to produce a different output when run on TC server. This output must be compatible with TeamCity’s service messages.
Fortunately, you don’t need to implement it by yourself ?
First, install jest-teamcity npm package to your project. Next, add jest-teamcity
to reporters
configuration option in your jest.config.js
file:
Adding TeamCity build step
Next, login to your TeamCity server. You need to know the location of npm.cmd
file on your TeamCity server. It should be in NodeJS installation catalog. In our case, the path to the file is C:\Dev\nodejs\npm.cmd
.
Now, go to TeamCity web administration interface and create a new build configuration or edit a current one. Then, add a new build step:
Configure the new step as follows:
- Runner type: Command line
- Step name: Jest JS tests
- Execute step: If all previous steps finished successfully (or anything else you prefer)
- Working directory: name of the catalog in your web app where you normally run
npm test
- Run: Custom script
- Custom script: “your_path_to_nodejs\npm.cmd” run test, for example: “C:\Dev\nodejs\npm.cmd” run test
- Format stderr output as: error
If everything is configured correctly, during the next build you should see jest
tests output recognized and nicely reported by TeamCity:
If that’s not the case, make sure that TEAMCITY_VERSION
environment variable is set on your TeamCity machine. That’s how jest-teamcity
reporter recognizes when to output standard jest
output and when to use TeamCity’s service messages format.
Debugging jest tests on TeamCity locally
If you run npm test
locally, you will see that the output is still normal, not the TeamCity format. That’s correct, because as we said before, the TEAMCITY_VERSION
environment variable must exist in order to see TeamCity-formatted output. Normally we don’t want to see TeamCity-formatted tests output locally, of course ?
It means that if you want to debug this configuration locally and actually see the TC tests output on your dev machine, you need to define such environment variable locally.
In order to do that in Windows, go to Edit the system environment variables
, click on Evironment Variables...
and add a new one in System variables
section. Call this variable TEAMCITY_VERSION
and give it some value, for example 2021.1
:
If you’re on another operating system, add the environment variable according to your system’s requirements.
Next, restart Visual Studio Code or the console tool you are using and execute npm test
again. Now you should see the tests results output in TeamCity format:
Jest tests in TeamCity – summary
I hope you found this piece of advice useful. At Yumasoft, we value tests a lot, both backend and frontend ones. However, the tests which are not run automatically are worth nothing. That’s why we always have all of our tests run automatically as part of our CI process (TeamCity in the sample project’s case).