How to use Jest
Advices and “must-know” things regarding Jest usage.
Table of contents
Local usage
Local usage is meant to be used through the built-in scripts, as described below.
CI/CD usage (Vercel)
Tests are automatically executed by Vercel during the deployment, in the build script, from package.json.
{
"scripts": {
"build": "yarn test:once:group:no-integration && next build"
}
}
If the tests fail, the build is aborted and nothing will be deployed.
Scripts
There are a few available scripts you can use right away, from package.json:
yarn test: Runs all tests in watch mode, runs tests for changed files only by default.yarn test:group:api: Runs tests tagged with the “api” group.yarn test:group:components: Runs tests tagged with the “components” group.yarn test:group:integration: Runs tests tagged with the “integration” group. Usually, integration test are meant to test external APIs or perform network requests, which makes them slow.yarn test:group:unit: Runs tests tagged with the “unit” group.yarn test:group:utils: Runs tests tagged with the “utils” group.yarn test:once: Run all tests, once. (no watcher) Used in CI/CD.yarn test:once:group:no-integration: Run all tests, once, except those tagged with the “integration” group. Used in CI/CD.yarn test:coverage: Run all tests, with coverage.yarn test:coverage:group:no-integration: Run all tests, with coverage, except those tagged with the “integration” group.yarn test:config: Prints the Jest configuration, quite useful for debugging Jest misconfiguration.
Feel free to add more groups to your liking, the above is simply a good place to start, but the only limit is your imagination!
Write tests
We won’t cover this section in-depth, you should refer to the official
jestdocumentation.
Also, we strongly recommend you to take a look at how Next Right Now tests are written. Look for *.test.ts files
Dependencies
jest: Jest is a delightful JavaScript Testing Framework with a focus on simplicity.jest-extended: Additional Jest matchers. Provides additional built-in tests for ease of testing.react-test-renderer: This package provides an experimental React renderer that can be used to render React components to pure JavaScript objects, without depending on the DOM or a native mobile environment. Essentially, this package makes it easy to grab a snapshot of the “DOM tree” rendered by a React DOM or React Native component without using a browser or jsdom.ts-jest: TypeScript preprocessor with source map support for Jest that lets you use Jest to test projects written in TypeScript.jest-to-match-shape-of: A Jest matcher to verify the structure of an object, particularly useful for api integration tests.jest-runner-groups: A test runner that allows you to tag your tests and execute specific groups of tests with Jest.
Known issues:
jest-emotion: Breaks tests