Skip to content

Commit ac0e92c

Browse files
committed
add createMatchMedia
1 parent 8162759 commit ac0e92c

7 files changed

Lines changed: 38 additions & 65 deletions

File tree

packages/autocomplete-js/src/__tests__/autocomplete.test.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as autocompleteShared from '@algolia/autocomplete-shared';
22
import { fireEvent, waitFor } from '@testing-library/dom';
33

4-
import { castToJestMock } from '../../../../test/utils';
4+
import { castToJestMock, createMatchMedia } from '../../../../test/utils';
55
import { autocomplete } from '../autocomplete';
66

77
jest.mock('@algolia/autocomplete-shared', () => {
@@ -214,16 +214,7 @@ describe('autocomplete-js', () => {
214214

215215
Object.defineProperty(window, 'matchMedia', {
216216
writable: true,
217-
value: jest.fn((query) => ({
218-
matches: true,
219-
media: query,
220-
onchange: null,
221-
addListener: jest.fn(),
222-
removeListener: jest.fn(),
223-
addEventListener: jest.fn(),
224-
removeEventListener: jest.fn(),
225-
dispatchEvent: jest.fn(),
226-
})),
217+
value: createMatchMedia({ matches: true }),
227218
});
228219

229220
update({ detachedMediaQuery: '' });

packages/autocomplete-js/src/__tests__/detached.test.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { fireEvent, waitFor } from '@testing-library/dom';
22

3+
import { createMatchMedia } from '../../../../test/utils';
34
import { autocomplete } from '../autocomplete';
45

56
describe('detached', () => {
@@ -8,16 +9,7 @@ describe('detached', () => {
89
beforeAll(() => {
910
Object.defineProperty(window, 'matchMedia', {
1011
writable: true,
11-
value: jest.fn((query) => ({
12-
matches: true,
13-
media: query,
14-
onchange: null,
15-
addListener: jest.fn(),
16-
removeListener: jest.fn(),
17-
addEventListener: jest.fn(),
18-
removeEventListener: jest.fn(),
19-
dispatchEvent: jest.fn(),
20-
})),
12+
value: createMatchMedia({ matches: true }),
2113
});
2214
});
2315

packages/autocomplete-js/src/__tests__/detachedMediaQuery.test.ts

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,8 @@
1+
import { createMatchMedia } from '../../../../test/utils';
12
import { autocomplete } from '../autocomplete';
23

34
describe('detachedMediaQuery', () => {
45
const originalMatchMedia = window.matchMedia;
5-
const addEventListener = jest.fn();
6-
7-
beforeAll(() => {
8-
Object.defineProperty(window, 'matchMedia', {
9-
writable: true,
10-
value: jest.fn((query) => ({
11-
matches: true,
12-
media: query,
13-
onchange: null,
14-
addListener: jest.fn(),
15-
removeListener: jest.fn(),
16-
addEventListener,
17-
removeEventListener: jest.fn(),
18-
dispatchEvent: jest.fn(),
19-
})),
20-
});
21-
});
226

237
afterAll(() => {
248
Object.defineProperty(window, 'matchMedia', {
@@ -32,14 +16,11 @@ describe('detachedMediaQuery', () => {
3216

3317
Object.defineProperty(window, 'matchMedia', {
3418
writable: true,
35-
value: jest.fn((query) => ({
19+
value: createMatchMedia({
3620
matches: true,
37-
media: query,
38-
onchange: null,
3921
addListener,
40-
removeListener: jest.fn(),
41-
dispatchEvent: jest.fn(),
42-
})),
22+
addEventListener: undefined,
23+
}),
4324
});
4425

4526
const container = document.createElement('div');
@@ -66,6 +47,5 @@ describe('detachedMediaQuery', () => {
6647
});
6748

6849
expect(addListener).toHaveBeenCalledTimes(1);
69-
expect(addEventListener).not.toHaveBeenCalled();
7050
});
7151
});

packages/autocomplete-js/src/__tests__/translations.test.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { waitFor } from '@testing-library/dom';
22

3+
import { createMatchMedia } from '../../../../test/utils';
34
import { autocomplete } from '../autocomplete';
45

56
describe('translations', () => {
@@ -51,16 +52,7 @@ describe('translations', () => {
5152
beforeAll(() => {
5253
Object.defineProperty(window, 'matchMedia', {
5354
writable: true,
54-
value: jest.fn((query) => ({
55-
matches: true,
56-
media: query,
57-
onchange: null,
58-
addListener: jest.fn(),
59-
removeListener: jest.fn(),
60-
addEventListener: jest.fn(),
61-
removeEventListener: jest.fn(),
62-
dispatchEvent: jest.fn(),
63-
})),
55+
value: createMatchMedia({ matches: true }),
6456
});
6557
});
6658

scripts/jest/setupTests.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { createMatchMedia } from '../../test/utils';
2+
13
import { toWarnDev } from './matchers';
24

35
expect.extend({ toWarnDev });
@@ -6,14 +8,5 @@ global.console.warn = jest.fn();
68

79
Object.defineProperty(window, 'matchMedia', {
810
writable: true,
9-
value: jest.fn((query) => ({
10-
matches: false,
11-
media: query,
12-
onchange: null,
13-
addListener: jest.fn(),
14-
removeListener: jest.fn(),
15-
addEventListener: jest.fn(),
16-
removeEventListener: jest.fn(),
17-
dispatchEvent: jest.fn(),
18-
})),
11+
value: createMatchMedia({}),
1912
});

test/utils/createMatchMedia.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
type MatchMediaProps = Partial<{
2+
matches: boolean;
3+
media: string;
4+
onchange: null;
5+
addListener: jest.Mock;
6+
removeListener: jest.Mock;
7+
addEventListener: jest.Mock;
8+
removeEventListener: jest.Mock;
9+
dispatchEvent: jest.Mock;
10+
}>;
11+
12+
export const createMatchMedia = (props: MatchMediaProps) => {
13+
return jest.fn((query) => ({
14+
matches: false,
15+
media: query,
16+
onchange: null,
17+
addListener: jest.fn(),
18+
removeListener: jest.fn(),
19+
addEventListener: jest.fn(),
20+
removeEventListener: jest.fn(),
21+
dispatchEvent: jest.fn(),
22+
...props,
23+
}));
24+
};

test/utils/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export * from './castToJestMock';
22
export * from './createApiResponse';
33
export * from './createCollection';
4+
export * from './createMatchMedia';
45
export * from './createNavigator';
56
export * from './createPlayground';
67
export * from './createScopeApi';

0 commit comments

Comments
 (0)