Jest states in docs: \"Jest virtualizes JavaScript environments and runs tests in parallel across worker processes.\"
But what about multiple tests inside one file, do t
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.
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.
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.