At Woovi, we care a lot about speed.
As a startup, we need a fast feedback loop to learn and ship faster.
We also care a lot about safety and quality, so we have more than 6 thousands automated tests to make sure we won't break anything.
Making our tests running faster in our CI/CD
We use CircleCI, as our CI/CD tool.
CircleCI enable us to split our tests in many containers, making our tests N containers times faster.
We created a reusable command:
commands:
test_pkg:
description: 'test a specific package'
parameters:
pkg:
type: string
steps:
- run:
name: 'Run tests << parameters.pkg >>'
command: |
TESTFILES=$(circleci tests glob "./packages/<< parameters.pkg >>/src/**/__tests__/*.spec.ts" | circleci tests split --split-by=timings)
JEST_JUNIT_OUTPUT_DIR="./test-results" node --expose-gc ./node_modules/.bin/jest --logHeapUsage --passWithNoTests --maxWorkers=7 --coverage --forceExit --ci --silent ${TESTFILES}
Let me explain what each part does
circleci tests glob "./packages/<< parameters.pkg >>/src/**/__tests__/*.spec.ts"
Find all files that match this glob pattern, all test files inside tests directory that ends in .spec.ts
circleci tests split --split-by=timings
Split tests based on their timings, so each container run the same amount of time.
node --expose-gc ./node_modules/.bin/jest --logHeapUsage --passWithNoTests --maxWorkers=7 --coverage --forceExit --ci --silent ${TESTFILES}
--expose-gc
tells the node to expose gc
(garbage collector) to jest, so it can cleanup some unused memory
--lopHeapUsage
shows how much memory each test is consuming
--passWithNoTests
enables tests files without any test case
--maxWorkers=7
controls the concurrency of jest, because it can't really know the real number of cpu available to it
--coverage
generates the code coverage report
--forceExit
forces tests to finish if needed
--ci
do not generate snapshot, breaks
--silent
remove console.log
to make tests run faster, I/O is expensive
${TESTFILES}
list of files to be tested in that specific container
In Summary
Understand how your CI/CD tool works can enable you to make it fast, and provide a fast feedback loop for your team.
Does your CI/CD support test splitting?
Reference
Woovi
Woovi is a Startup that enables shoppers to pay as they like. To make this possible, Woovi provides instant payment solutions for merchants to accept orders.
If you want to work with us, we are hiring!
Photo by Gavin Biesheuvel on Unsplash
Top comments (0)