Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jest-circus runs children in shuffled order #12922

Merged
merged 92 commits into from Feb 23, 2023
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
e43ca99
jest-circus runs children in shuffled order
jhwang98 Jun 7, 2022
bbb1cf3
added shuffle and pseudorandom number generator
jhwang98 Jun 8, 2022
4c1d07c
merged master
Joshua-Hwang Aug 25, 2022
99ac4cd
added cli argv
Joshua-Hwang Sep 3, 2022
882f920
removed unnecessary dependencies
Joshua-Hwang Sep 3, 2022
4df23a9
add console logs about the seed
Joshua-Hwang Sep 3, 2022
dc6e64f
More readable Math.pow()
Joshua-Hwang Sep 3, 2022
3d09cfb
Used recommended logging approach
Joshua-Hwang Sep 3, 2022
f8860e2
Used recommended logging approach
Joshua-Hwang Sep 3, 2022
0bec19f
added prando rng
Joshua-Hwang Sep 3, 2022
3a1d712
bug where rng was recreated every run
Joshua-Hwang Sep 3, 2022
95590dc
swapped order of logs
Joshua-Hwang Sep 3, 2022
14349bd
added typing for the rng
Joshua-Hwang Sep 5, 2022
549988d
Merge branch 'main' of github.com:facebook/jest into feat-randomise-t…
Joshua-Hwang Sep 5, 2022
4ae8ff2
linting issues fixed
jhwang98 Sep 29, 2022
967b32e
unit tests are green
jhwang98 Sep 29, 2022
561146c
used snapshots instead
jhwang98 Sep 30, 2022
2f95b65
added e2e tests
jhwang98 Sep 30, 2022
50bada0
changed valid seeds
jhwang98 Sep 30, 2022
b78fdc2
added changelog message
jhwang98 Sep 30, 2022
3f33508
improved cli help and added documentation
jhwang98 Sep 30, 2022
d84caa1
Merge branch 'main' into feat-randomise-tests
jhwang98 Sep 30, 2022
b5c34fe
Update docs/CLI.md
jhwang98 Sep 30, 2022
b9c5139
Update docs/CLI.md
jhwang98 Sep 30, 2022
1b412b4
skipped jasmine
jhwang98 Sep 30, 2022
c45244c
updated cli help and docs for randomize
jhwang98 Sep 30, 2022
e1e73a0
merged
jhwang98 Sep 30, 2022
2152031
updated documentation order
jhwang98 Sep 30, 2022
6bb9449
Update docs/CLI.md
jhwang98 Sep 30, 2022
164d6fa
Update docs/CLI.md
jhwang98 Sep 30, 2022
79401d1
removed whitespace
jhwang98 Sep 30, 2022
b6c4da4
added copyright headers
jhwang98 Oct 4, 2022
19cf2b5
modifed snapshots to not rely on the actual lines
jhwang98 Oct 4, 2022
ca3a582
Merge branch 'main' into feat-randomise-tests
SimenB Oct 4, 2022
2007d47
move changelog entry
SimenB Oct 4, 2022
9361b80
Merge branch 'facebook:main' into feat-randomise-tests
Joshua-Hwang Oct 6, 2022
4d61ba2
merged master
Joshua-Hwang Oct 12, 2022
a087ce6
added documentation for configuration
Joshua-Hwang Oct 14, 2022
7b4bd2b
merged main
Joshua-Hwang Oct 14, 2022
b175652
using pure-rand
Joshua-Hwang Oct 14, 2022
54cc38c
updated cli message
Joshua-Hwang Oct 14, 2022
974bc5b
added randomize to config
Joshua-Hwang Oct 14, 2022
b4e448f
randomize gets passed to config objects
Joshua-Hwang Oct 14, 2022
816b8e6
lint fix
Joshua-Hwang Oct 14, 2022
4ba33d4
group options returns randomize
Joshua-Hwang Oct 14, 2022
7b40ca5
removed unnecessary messages
Joshua-Hwang Oct 14, 2022
ebf01d5
improved docs
Joshua-Hwang Oct 14, 2022
9172451
updated types
Joshua-Hwang Oct 14, 2022
0797346
changed the type of the rng
Joshua-Hwang Oct 14, 2022
9c0ff4e
unit tests green
Joshua-Hwang Oct 14, 2022
604499d
added unit tests for the shuffling of tests
Joshua-Hwang Oct 14, 2022
001d150
e2e tests green
Joshua-Hwang Oct 14, 2022
30b3452
small change to docs
Joshua-Hwang Oct 14, 2022
8661cad
e2e test for the config
Joshua-Hwang Oct 14, 2022
81d526b
tweaked changelog
Joshua-Hwang Oct 14, 2022
825fdd9
linting fix
Joshua-Hwang Oct 14, 2022
7512738
factorised test
Joshua-Hwang Oct 14, 2022
888f565
Merge branch 'main' into feat-randomise-tests
Joshua-Hwang Oct 17, 2022
a6f6982
Merge branch 'main' into feat-randomise-tests
Joshua-Hwang Oct 20, 2022
57e9836
linting fix
Joshua-Hwang Oct 21, 2022
b844e1b
yarn dedupe
Joshua-Hwang Oct 21, 2022
bbc70a1
show seed true for randomize
Joshua-Hwang Oct 21, 2022
d4509cb
updated docs about randomize
Joshua-Hwang Oct 21, 2022
6ce659d
e2e tests also test randomize
Joshua-Hwang Oct 21, 2022
7bdad9f
updated error message
Joshua-Hwang Oct 21, 2022
08ed42c
Merge branch 'main' of github.com:facebook/jest into feat-randomise-t…
Joshua-Hwang Oct 22, 2022
5fd2e2a
move shuffleArray to jest-circus
Joshua-Hwang Oct 22, 2022
2bffe52
prettier
SimenB Oct 22, 2022
f5b919c
improved randomize docs
Joshua-Hwang Oct 22, 2022
2688290
merged master
Joshua-Hwang Oct 28, 2022
ec85fb8
Merge branch 'main' of github.com:facebook/jest into feat-randomise-t…
Joshua-Hwang Oct 31, 2022
94c0740
Merge branch 'main' of github.com:facebook/jest into feat-randomise-t…
Joshua-Hwang Nov 3, 2022
e212ed9
Merge branch 'main' into feat-randomise-tests
SimenB Nov 7, 2022
5946e84
lint fix
jhwang98 Nov 8, 2022
ebe2485
merged main
jhwang98 Nov 8, 2022
c5145a6
Merge branch 'main' of https://github.com/facebook/jest into feat-ran…
jhwang98 Nov 14, 2022
4705449
merged main
jhwang98 Jan 12, 2023
af913e2
bumped pure-rand package
jhwang98 Jan 13, 2023
a6b4d06
Merge branch 'main' into feat-randomise-tests
jhwang98 Jan 25, 2023
e4f0b24
Merge branch 'main' into feat-randomise-tests
jhwang98 Feb 13, 2023
c4baaaa
yarn.lock updated
jhwang98 Feb 14, 2023
87547f3
fixed copyright headers
jhwang98 Feb 14, 2023
8bfa4c8
Merge branch 'main' into feat-randomise-tests
Joshua-Hwang Feb 16, 2023
0202230
Merge branch 'main' into feat-randomise-tests
SimenB Feb 23, 2023
3a0a4f1
Update packages/jest-config/src/normalize.ts
jhwang98 Feb 23, 2023
43d6f8b
Update packages/jest-core/src/cli/index.ts
jhwang98 Feb 23, 2023
7bd3fe1
Update packages/jest-circus/src/shuffleArray.ts
jhwang98 Feb 23, 2023
cff3995
remove bounds check as it's being done at the normalize level
jhwang98 Feb 23, 2023
7c8bfc1
changed error message slightly
jhwang98 Feb 23, 2023
c3c6516
swapped order for generating rng
jhwang98 Feb 23, 2023
d57bf1c
Update packages/jest-circus/src/run.ts
SimenB Feb 23, 2023
1137ce1
Update packages/jest-circus/src/run.ts
SimenB Feb 23, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -41,6 +41,7 @@
### Features

- `[@jest/environment, jest-runtime]` Allow passing a generic type argument to `jest.createMockFromModule<T>()` method ([#13202](https://github.com/facebook/jest/pull/13202))
- `[jest-circus, jest-cli, jest-config, @jest/core, @jest/types, @jest-util]` Add cli feature to randomize order or tests ([#12922](https://github.com/facebook/jest/pull/12922))
- `[expect]` Expose `ExpectationResult` type ([#13240](https://github.com/facebook/jest/pull/13240))
- `[jest-snapshot]` Expose `Context` type ([#13240](https://github.com/facebook/jest/pull/13240))
- `[@jest/globals]` Add `jest.Mock` type helper ([#13235](https://github.com/facebook/jest/pull/13235))
Expand Down
21 changes: 21 additions & 0 deletions docs/CLI.md
Expand Up @@ -28,6 +28,18 @@ Run tests related to changed files based on hg/git (uncommitted files):
jest -o
```

Run tests in a file in a random order (this will print the seed used for random number generation):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I get the idea, but what if this would be moved to --randomize? If a user is interested to read about --randomize, current text does not provide usage details. It is not really clear where to look for it and the details here are important.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've copied what I've written here to be part of the CLI description of the --randomize option.
I've done the same with --seed as well.

Was this what you were looking for?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. I was trying to say that this usage information could be more useful, if placed next to --randomize description. That’s there I would expect to find it, but this is just an opinion (;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ahh gotcha. Yeah that makes sense.
I initially put a description near the beginning because this might be a popular features. On further thinking it's probably not that popular.


```bash
jest --randomize
```

Run tests in a file in an order determined by a seed:

```bash
jest --randomize --seed 1234
```

Run tests related to `path/to/fileA.js` and `path/to/fileB.js`:

```bash
Expand Down Expand Up @@ -318,6 +330,11 @@ If configuration files are found in the specified paths, _all_ projects specifie

:::

### `--randomize`

Shuffle the order of the tests within a file. The seed used to generate the new order will be printed to stdout.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add something along the lines of "passing the same seed will allow you to recreate the test run" or some such? Preferably with a better wording 😅

In order to determine the seed refer to the `--seed` CLI option.
jhwang98 marked this conversation as resolved.
Show resolved Hide resolved

### `--reporters`

Run tests with specified reporters. [Reporter options](configuration#reporters-arraymodulename--modulename-options) are not available via CLI. Example with multiple reporters:
Expand Down Expand Up @@ -350,6 +367,10 @@ The default regex matching works fine on small runs, but becomes slow if provide

:::

### `--seed`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### `--seed`
### `--seed=<num>`

might need to tweak the anchor in randomize


Run the tests in the order specified by the seed value. Must be used with the `--randomize` flag.
jhwang98 marked this conversation as resolved.
Show resolved Hide resolved

### `--selectProjects <project1> ... <projectN>`

Run the tests of the specified projects. Jest uses the attribute `displayName` in the configuration to identify each project. If you use this option, you should provide a `displayName` to all your projects.
Expand Down
344 changes: 344 additions & 0 deletions e2e/__tests__/__snapshots__/randomize.test.ts.snap
@@ -0,0 +1,344 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`works with each 1`] = `
"PASS __tests__/each.test.js
✓ test1
✓ test2
✓ test3
describe1
✓ test4
✓ test6
✓ test5
describe3
✓ test11
✓ test12
✓ test10
describe4
✓ test14
✓ test13
✓ test15
describe2
✓ test4
✓ test5
✓ test6"
`;

exports[`works with hooks 1`] = `
"Seed is 123
console.log
This is before all

at Object.log (__tests__/hooks.test.js:2:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
test4

at Object.log (__tests__/hooks.test.js:31:13)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
test6

at Object.log (__tests__/hooks.test.js:39:13)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
test5

at Object.log (__tests__/hooks.test.js:35:13)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
test1

at Object.log (__tests__/hooks.test.js:18:11)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
This is before each describe3

at Object.log (__tests__/hooks.test.js:63:13)

console.log
test11

at Object.log (__tests__/hooks.test.js:71:13)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
This is before each describe3

at Object.log (__tests__/hooks.test.js:63:13)

console.log
test12

at Object.log (__tests__/hooks.test.js:75:13)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
This is before each describe3

at Object.log (__tests__/hooks.test.js:63:13)

console.log
test14

at Object.log (__tests__/hooks.test.js:84:15)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
This is before each describe3

at Object.log (__tests__/hooks.test.js:63:13)

console.log
test13

at Object.log (__tests__/hooks.test.js:80:15)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
This is before each describe3

at Object.log (__tests__/hooks.test.js:63:13)

console.log
test15

at Object.log (__tests__/hooks.test.js:88:15)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
This is before each describe3

at Object.log (__tests__/hooks.test.js:63:13)

console.log
test10

at Object.log (__tests__/hooks.test.js:67:13)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
test7

at Object.log (__tests__/hooks.test.js:49:13)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
test8

at Object.log (__tests__/hooks.test.js:53:13)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
test9

at Object.log (__tests__/hooks.test.js:57:13)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is after all describe2

at Object.log (__tests__/hooks.test.js:45:13)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
test2

at Object.log (__tests__/hooks.test.js:22:11)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is before each

at Object.log (__tests__/hooks.test.js:6:11)

console.log
test3

at Object.log (__tests__/hooks.test.js:26:11)

console.log
This is after each

at Object.log (__tests__/hooks.test.js:10:11)

console.log
This is after all

at Object.log (__tests__/hooks.test.js:14:11)
"
`;

exports[`works with passing tests 1`] = `
"PASS __tests__/success.test.js
✓ test1
✓ test2
✓ test3
describe1
✓ test4
✓ test6
✓ test5
describe3
✓ test11
✓ test12
✓ test10
describe4
✓ test14
✓ test13
✓ test15
describe2
✓ test7
✓ test8
✓ test9"
`;

exports[`works with snapshots 1`] = `
"PASS __tests__/snapshots.test.js
✓ test1
✓ test2
✓ test3
describe1
✓ test4
✓ test6
✓ test5
describe3
✓ test11
✓ test12
✓ test10
describe4
✓ test14
✓ test13
✓ test15
describe2
✓ test4
✓ test5
✓ test6"
`;