Are tests inside one file run in parallel in Jest?
Solution 1:
Yes, you can safely assume tests inside a single file will run in the order of appearance. You could prove this by putting a console.log
in each it
block.
It's probably worth mentioning that it's generally bad practice to rely on the order of execution / external state...and you never know, Jest (or the current underlying test runner, Jasmine) may decide to run them in a random order in a newer version.
Solution 2:
Jest in 2020
To add a bit more information on this, async
tests are run in series inside of a describe()
statement. This is useful for IO/Database setup and cleanup functions. Just take a look at the following example:
some.spec.js
describe("my asynchronous tests", () => {
beforeEach(async () => {
console.log('> setup test')
// SOMETHING ASYNCHRONOUS
});
afterEach(async () => {
console.log('< teardown test')
// SOMETHING ASYNCHRONOUS
});
test("test 1", async () => {
console.log('-- starting test 1');
// SOMETHING ASYNCHRONOUS
console.log('-- finished test 1');
}, 100000);
test("test 2", async () => {
console.log('-- starting test 2');
// SOMETHING ASYNCHRONOUS
console.log('-- finished test 2');
}, 100000);
});
Outputs:
> setup test
-- starting test 1
-- finished test 1
< teardown test
> setup test
-- starting test 2
-- finished test 2
< teardown test
Multiple describe()
statements will execute in parallel though, even if they're in the same file.
Solution 3:
You can use test.concurrent('test run concurrently', () => { ... })
if you want to run them in parallel inside one file is too slow. It is a bit buggy and not well documented, but at least there's a way there.
One thing I notice is it does not wait for async
stuff in the beforeAll()
so you need some of your own trick(like setInterval
to wait) to make it work as expected.
Solution 4:
Note, you may get side effects of two tests running in parallel if one of them times out after 5 seconds - jest stops waiting for the timed out test, but it's code continues executing, in parallel with the following test jest picks up.
(pulled out quite an amount of hair before I realised that this was the reason of the side effects that led me here)