Skip to content

Commit f4bbd5a

Browse files
Merge #1694
1694: Switch test runner from Jest to Vitest r=curquiza a=flevi29 # Pull Request ## Why? - faster, more efficient (unless abused, misused) - TS/ESM support out of the box - very little configuration required - watch mode included - works on the same concepts as Jest when it comes to writing tests, so minimal changes needed in test files - better maintained due to its simplicity and modern web orientation - trusted by popular and battle-tested packages [svelte](https://github.com/sveltejs/svelte), [Nuxt](https://github.com/nuxt/nuxt), ... - ESM oriented, future proof I am also getting rid of `jsdom` tests, we were already skipping Node.js tests when using `jsdom` and everything else is based on web standards so there isn't really much of a benefit to `jsdom`. This halves the time tests are running for. I am also planning to parallelize some tests by using multiple indexes on Meilisearch to further speed up tests. ## PR checklist Please check if your PR fulfills the following requirements: - [x] Does this PR fix an existing issue, or have you listed the changes applied in the PR description (and why they are needed)? - [x] Have you read the contributing guidelines? - [x] Have you made sure that the title is accurate and descriptive of the changes? Thank you so much for contributing to Meilisearch! Co-authored-by: F. Levi <[email protected]>
2 parents efbaa33 + 849cdc3 commit f4bbd5a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+968
-2132
lines changed

.eslintrc.js

Lines changed: 0 additions & 82 deletions
This file was deleted.

eslint.config.js

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const eslint = require("@eslint/js");
22
const tseslint = require("typescript-eslint");
33
const tsdoc = require("eslint-plugin-tsdoc");
4-
const jest = require("eslint-plugin-jest");
4+
const vitest = require("@vitest/eslint-plugin");
55
const globals = require("globals");
66
const prettier = require("eslint-config-prettier");
77

@@ -59,25 +59,16 @@ module.exports = [
5959
"@typescript-eslint/ban-ts-ignore": "off",
6060
},
6161
})),
62-
// Jest linting for test files
62+
// Vitest linting for test files
6363
{
6464
files: ["tests/*.ts"],
65-
...jest.configs["flat/recommended"],
66-
// languageOptions: {
67-
// ...jest.configs['flat/recommended'].languageOptions,
68-
// globals: globals.jest,
69-
// },
65+
plugins: { vitest },
7066
rules: {
71-
...jest.configs["flat/recommended"].rules,
67+
...vitest.configs.recommended.rules,
7268
// @TODO: Remove all of these rules and adapt code!
73-
"jest/no-disabled-tests": "off",
74-
"jest/expect-expect": "off",
75-
"jest/no-conditional-expect": "off",
76-
"jest/valid-title": "off",
77-
"jest/no-jasmine-globals": "off",
78-
"jest/valid-expect-in-promise": "off",
79-
"jest/valid-expect": "off",
80-
"jest/no-alias-methods": "off",
69+
"vitest/expect-expect": "off",
70+
"vitest/valid-title": "off",
71+
"vitest/valid-expect": "off",
8172
},
8273
},
8374
prettier,

package.json

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,18 @@
3030
},
3131
"scripts": {
3232
"playground:javascript": "yarn --cwd ./playgrounds/javascript && yarn --cwd ./playgrounds/javascript start",
33-
"clear_jest": "jest --clearCache",
3433
"cleanup": "shx rm -rf dist/",
3534
"build": "yarn cleanup && rollup -c && rollup -c --environment NODE_ENV:production",
3635
"build:docs": "typedoc",
3736
"watch": "yarn cleanup && rollup -c --watch",
3837
"postbuild": "yarn size && yarn typingsheader",
39-
"test": "yarn clear_jest && jest --runInBand --verbose",
38+
"test": "vitest run --coverage",
4039
"types:watch": "nodemon --config nodemon.json",
4140
"types": "yarn tsc",
4241
"test:env:browser": "yarn build && yarn --cwd tests/env/express && yarn --cwd tests/env/express test",
43-
"test:watch": "yarn clear_jest && yarn test --watch",
44-
"test:coverage": "yarn test --coverage",
45-
"test:ci": "yarn test --ci",
42+
"test:watch": "vitest watch",
43+
"test:coverage": "yarn test",
44+
"test:ci": "yarn test",
4645
"test:env": "yarn build && yarn test:env:nodejs && yarn test:env:esm && yarn test:env:node-ts",
4746
"test:env:node-ts": "yarn --cwd tests/env/typescript-node start",
4847
"test:env:nodejs": "yarn build && node tests/env/node/index.js && node tests/env/node/getting_started.js",
@@ -81,18 +80,14 @@
8180
"@rollup/plugin-json": "^6.1.0",
8281
"@rollup/plugin-node-resolve": "15.3.0",
8382
"@types/eslint__js": "^8.42.3",
84-
"@types/jest": "^29.5.11",
83+
"@vitest/coverage-v8": "2.0.5",
84+
"@vitest/eslint-plugin": "^1.1.4",
8585
"brotli-size": "^4.0.0",
8686
"eslint": "^9.11.1",
8787
"eslint-config-prettier": "^9.1.0",
88-
"eslint-plugin-jest": "^28.8.0",
8988
"eslint-plugin-tsdoc": "^0.3.0",
9089
"globals": "^15.9.0",
9190
"gzip-size": "^6.0.0",
92-
"jest": "^29.7.0",
93-
"jest-environment-jsdom": "^29.7.0",
94-
"jest-fetch-mock": "^3.0.3",
95-
"jest-watch-typeahead": "^2.2.2",
9691
"kleur": "^4.1.5",
9792
"lint-staged": "15.2.10",
9893
"nodemon": "^3.1.7",
@@ -103,10 +98,10 @@
10398
"rollup-plugin-terser": "^7.0.0",
10499
"rollup-plugin-typescript2": "^0.36.0",
105100
"shx": "^0.3.2",
106-
"ts-jest": "^29.2.5",
107101
"typedoc": "^0.26.7",
108102
"typescript": "^5.4.5",
109-
"typescript-eslint": "^8.8.0"
103+
"typescript-eslint": "^8.8.0",
104+
"vitest": "2.0.5"
110105
},
111106
"packageManager": "[email protected]"
112107
}

tests/__snapshots__/facet_search.test.ts.snap

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Jest Snapshot v1, https://goo.gl/fbAQLP
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

3-
exports[`Test on POST search Admin key: basic facet value search 1`] = `
3+
exports[`Test on POST search > Admin key: basic facet value search 1`] = `
44
{
55
"facetHits": [
66
{
@@ -17,7 +17,7 @@ exports[`Test on POST search Admin key: basic facet value search 1`] = `
1717
}
1818
`;
1919

20-
exports[`Test on POST search Admin key: facet value search with filter 1`] = `
20+
exports[`Test on POST search > Admin key: facet value search with filter 1`] = `
2121
{
2222
"facetHits": [
2323
{
@@ -30,7 +30,7 @@ exports[`Test on POST search Admin key: facet value search with filter 1`] = `
3030
}
3131
`;
3232

33-
exports[`Test on POST search Admin key: facet value search with no facet query 1`] = `
33+
exports[`Test on POST search > Admin key: facet value search with no facet query 1`] = `
3434
{
3535
"facetHits": [
3636
{
@@ -55,7 +55,7 @@ exports[`Test on POST search Admin key: facet value search with no facet query 1
5555
}
5656
`;
5757

58-
exports[`Test on POST search Admin key: facet value search with search query 1`] = `
58+
exports[`Test on POST search > Admin key: facet value search with search query 1`] = `
5959
{
6060
"facetHits": [
6161
{
@@ -68,7 +68,7 @@ exports[`Test on POST search Admin key: facet value search with search query 1`]
6868
}
6969
`;
7070

71-
exports[`Test on POST search Master key: basic facet value search 1`] = `
71+
exports[`Test on POST search > Master key: basic facet value search 1`] = `
7272
{
7373
"facetHits": [
7474
{
@@ -85,7 +85,7 @@ exports[`Test on POST search Master key: basic facet value search 1`] = `
8585
}
8686
`;
8787

88-
exports[`Test on POST search Master key: facet value search with filter 1`] = `
88+
exports[`Test on POST search > Master key: facet value search with filter 1`] = `
8989
{
9090
"facetHits": [
9191
{
@@ -98,7 +98,7 @@ exports[`Test on POST search Master key: facet value search with filter 1`] = `
9898
}
9999
`;
100100

101-
exports[`Test on POST search Master key: facet value search with no facet query 1`] = `
101+
exports[`Test on POST search > Master key: facet value search with no facet query 1`] = `
102102
{
103103
"facetHits": [
104104
{
@@ -123,7 +123,7 @@ exports[`Test on POST search Master key: facet value search with no facet query
123123
}
124124
`;
125125

126-
exports[`Test on POST search Master key: facet value search with search query 1`] = `
126+
exports[`Test on POST search > Master key: facet value search with search query 1`] = `
127127
{
128128
"facetHits": [
129129
{
@@ -136,7 +136,7 @@ exports[`Test on POST search Master key: facet value search with search query 1`
136136
}
137137
`;
138138

139-
exports[`Test on POST search Search key: basic facet value search 1`] = `
139+
exports[`Test on POST search > Search key: basic facet value search 1`] = `
140140
{
141141
"facetHits": [
142142
{
@@ -153,7 +153,7 @@ exports[`Test on POST search Search key: basic facet value search 1`] = `
153153
}
154154
`;
155155

156-
exports[`Test on POST search Search key: facet value search with filter 1`] = `
156+
exports[`Test on POST search > Search key: facet value search with filter 1`] = `
157157
{
158158
"facetHits": [
159159
{
@@ -166,7 +166,7 @@ exports[`Test on POST search Search key: facet value search with filter 1`] = `
166166
}
167167
`;
168168

169-
exports[`Test on POST search Search key: facet value search with no facet query 1`] = `
169+
exports[`Test on POST search > Search key: facet value search with no facet query 1`] = `
170170
{
171171
"facetHits": [
172172
{
@@ -191,7 +191,7 @@ exports[`Test on POST search Search key: facet value search with no facet query
191191
}
192192
`;
193193

194-
exports[`Test on POST search Search key: facet value search with search query 1`] = `
194+
exports[`Test on POST search > Search key: facet value search with search query 1`] = `
195195
{
196196
"facetHits": [
197197
{

tests/__snapshots__/faceting.test.ts.snap

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Jest Snapshot v1, https://goo.gl/fbAQLP
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

3-
exports[`Test on faceting Admin key: Get default faceting object 1`] = `
3+
exports[`Test on faceting > Admin key: Get default faceting object 1`] = `
44
{
55
"maxValuesPerFacet": 100,
66
"sortFacetValuesBy": {
@@ -9,7 +9,7 @@ exports[`Test on faceting Admin key: Get default faceting object 1`] = `
99
}
1010
`;
1111

12-
exports[`Test on faceting Admin key: Reset faceting 1`] = `
12+
exports[`Test on faceting > Admin key: Reset faceting 1`] = `
1313
{
1414
"maxValuesPerFacet": 100,
1515
"sortFacetValuesBy": {
@@ -18,7 +18,7 @@ exports[`Test on faceting Admin key: Reset faceting 1`] = `
1818
}
1919
`;
2020

21-
exports[`Test on faceting Admin key: Update faceting at null 1`] = `
21+
exports[`Test on faceting > Admin key: Update faceting at null 1`] = `
2222
{
2323
"maxValuesPerFacet": 100,
2424
"sortFacetValuesBy": {
@@ -27,7 +27,7 @@ exports[`Test on faceting Admin key: Update faceting at null 1`] = `
2727
}
2828
`;
2929

30-
exports[`Test on faceting Admin key: Update faceting settings 1`] = `
30+
exports[`Test on faceting > Admin key: Update faceting settings 1`] = `
3131
{
3232
"maxValuesPerFacet": 12,
3333
"sortFacetValuesBy": {
@@ -37,7 +37,7 @@ exports[`Test on faceting Admin key: Update faceting settings 1`] = `
3737
}
3838
`;
3939

40-
exports[`Test on faceting Master key: Get default faceting object 1`] = `
40+
exports[`Test on faceting > Master key: Get default faceting object 1`] = `
4141
{
4242
"maxValuesPerFacet": 100,
4343
"sortFacetValuesBy": {
@@ -46,7 +46,7 @@ exports[`Test on faceting Master key: Get default faceting object 1`] = `
4646
}
4747
`;
4848

49-
exports[`Test on faceting Master key: Reset faceting 1`] = `
49+
exports[`Test on faceting > Master key: Reset faceting 1`] = `
5050
{
5151
"maxValuesPerFacet": 100,
5252
"sortFacetValuesBy": {
@@ -55,7 +55,7 @@ exports[`Test on faceting Master key: Reset faceting 1`] = `
5555
}
5656
`;
5757

58-
exports[`Test on faceting Master key: Update faceting at null 1`] = `
58+
exports[`Test on faceting > Master key: Update faceting at null 1`] = `
5959
{
6060
"maxValuesPerFacet": 100,
6161
"sortFacetValuesBy": {
@@ -64,7 +64,7 @@ exports[`Test on faceting Master key: Update faceting at null 1`] = `
6464
}
6565
`;
6666

67-
exports[`Test on faceting Master key: Update faceting settings 1`] = `
67+
exports[`Test on faceting > Master key: Update faceting settings 1`] = `
6868
{
6969
"maxValuesPerFacet": 12,
7070
"sortFacetValuesBy": {

tests/__snapshots__/get_search.test.ts.snap

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Jest Snapshot v1, https://goo.gl/fbAQLP
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

3-
exports[`Test on GET search Admin key: search on attributesToSearchOn set to null 1`] = `
3+
exports[`Test on GET search > Admin key: search on attributesToSearchOn set to null 1`] = `
44
{
55
"estimatedTotalHits": 2,
66
"hits": [
@@ -24,7 +24,7 @@ exports[`Test on GET search Admin key: search on attributesToSearchOn set to nul
2424
}
2525
`;
2626

27-
exports[`Test on GET search Master key: search on attributesToSearchOn set to null 1`] = `
27+
exports[`Test on GET search > Master key: search on attributesToSearchOn set to null 1`] = `
2828
{
2929
"estimatedTotalHits": 2,
3030
"hits": [
@@ -48,7 +48,7 @@ exports[`Test on GET search Master key: search on attributesToSearchOn set to nu
4848
}
4949
`;
5050

51-
exports[`Test on GET search Search key: search on attributesToSearchOn set to null 1`] = `
51+
exports[`Test on GET search > Search key: search on attributesToSearchOn set to null 1`] = `
5252
{
5353
"estimatedTotalHits": 2,
5454
"hits": [

0 commit comments

Comments
 (0)