DEV Community

loading...

Test splitting with Jest on CircleCI

Joe Becher
・1 min read

One of our customers asked on Twitter, "How do I setup test splitting on CircleCI with Jest?"

This is briefly explain in the CircleCI docs, but I can see where it could be confusing.

I'm not the best writer, so I will let my code do the talking. This should serve as a good exercise in code documentation as well.

A portion of my package.json

  "scripts": {
    "test": "jest",
  },
  "jest": {
    "reporters": [
      "default",
      "jest-junit"
    ]
  },
  "jest-junit": {
    "outputDirectory": "test_results/junit"
  }
Enter fullscreen mode Exit fullscreen mode

My .circleci/config.json file

version: 2
jobs:
  build:
    parallelism: 3
    docker:
      # I want to make sure I know exactly what version I'm using
      - image: circleci/node:10.15.3

    working_directory: ~/repo

    steps:
      - checkout

      # Npm CI uses the package-lock.json file to ensure exact versions
      # This prevents changes and compromised upstream dependencies
      # from changing your project. It wipes the node_modules directory
      # so there is no need for a dependencies cache here.
      - run: npm ci

      # First we save the split test file names into an env
      # Then we pass that to jest
      - run:
          name: Run Jest tests using test splitting
          command: |
            TESTFILES=$(circleci tests glob "test/**/*.test.js" | circleci tests split --split-by=timings)
            npm test $TESTFILES

      - store_test_results:
          path: test_results

      - store_artifacts:
          path: test_results
          destination: test_results
Enter fullscreen mode Exit fullscreen mode

Hope this helps!

Discussion (0)