Skip to content

Commit 872163b

Browse files
refactor: expose legacy extend-expect (#189)
1 parent d372016 commit 872163b

File tree

6 files changed

+76
-2
lines changed

6 files changed

+76
-2
lines changed

legacy-extend-expect.d.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import type { AccessibilityState, ImageStyle, StyleProp, TextStyle, ViewStyle } from 'react-native';
2+
import type { ReactTestInstance } from 'react-test-renderer';
3+
import type { AccessibilityValueMatcher } from './src/to-have-accessibility-value';
4+
5+
export interface JestNativeMatchers<R> {
6+
legacy_toBeDisabled(): R;
7+
legacy_toBeEmptyElement(): R;
8+
legacy_toBeEnabled(): R;
9+
legacy_toBeOnTheScreen(): R;
10+
legacy_toBeVisible(): R;
11+
legacy_toContainElement(element: ReactTestInstance | null): R;
12+
legacy_toHaveTextContent(text: string | RegExp, options?: { normalizeWhitespace: boolean }): R;
13+
legacy_toHaveProp(attr: string, value?: unknown): R;
14+
legacy_toHaveStyle(style: StyleProp<ViewStyle | TextStyle | ImageStyle>): R;
15+
legacy_toHaveAccessibilityState(state: AccessibilityState): R;
16+
legacy_toHaveAccessibilityValue(value: AccessibilityValueMatcher): R;
17+
}
18+
19+
// Implicit Jest global `expect`.
20+
declare global {
21+
namespace jest {
22+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
23+
interface Matchers<R, T = {}> extends JestNativeMatchers<R> {}
24+
}
25+
}
26+
27+
// Explicit `@jest/globals` `expect` matchers.
28+
declare module '@jest/expect' {
29+
interface Matchers<R extends void | Promise<void>> extends JestNativeMatchers<R> {}
30+
}

legacy-extend-expect.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require('./dist/legacy-extend-expect');

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
"files": [
2222
"dist",
2323
"extend-expect.js",
24-
"extend-expect.d.ts"
24+
"extend-expect.d.ts",
25+
"legacy-extend-expect.js",
26+
"legacy-extend-expect.d.ts"
2527
],
2628
"keywords": [
2729
"testing",
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import React from 'react';
2+
import { View, Text } from 'react-native';
3+
import { render, screen } from '@testing-library/react-native';
4+
import '../legacy-extend-expect';
5+
6+
test('legacy expect.extend() works correctly', () => {
7+
render(
8+
<View testID="view">
9+
<Text>Hello</Text>
10+
</View>,
11+
);
12+
expect(screen.getByTestId('view')).legacy_toBeOnTheScreen();
13+
expect(screen.getByTestId('view')).legacy_toHaveTextContent('Hello');
14+
expect(screen.getByTestId('view')).legacy_toBeVisible();
15+
expect(screen.getByTestId('view')).legacy_toBeEnabled();
16+
expect(screen.getByTestId('view')).not.legacy_toBeDisabled();
17+
});

src/legacy-extend-expect.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { toBeDisabled, toBeEnabled } from './to-be-disabled';
2+
import { toBeEmptyElement } from './to-be-empty-element';
3+
import { toBeOnTheScreen } from './to-be-on-the-screen';
4+
import { toBeVisible } from './to-be-visible';
5+
import { toContainElement } from './to-contain-element';
6+
import { toHaveAccessibilityState } from './to-have-accessibility-state';
7+
import { toHaveAccessibilityValue } from './to-have-accessibility-value';
8+
import { toHaveProp } from './to-have-prop';
9+
import { toHaveStyle } from './to-have-style';
10+
import { toHaveTextContent } from './to-have-text-content';
11+
12+
expect.extend({
13+
legacy_toBeDisabled: toBeDisabled,
14+
legacy_toBeEnabled: toBeEnabled,
15+
legacy_toBeEmptyElement: toBeEmptyElement,
16+
legacy_toBeOnTheScreen: toBeOnTheScreen,
17+
legacy_toBeVisible: toBeVisible,
18+
legacy_toContainElement: toContainElement,
19+
legacy_toHaveAccessibilityState: toHaveAccessibilityState,
20+
legacy_toHaveAccessibilityValue: toHaveAccessibilityValue,
21+
legacy_toHaveProp: toHaveProp,
22+
legacy_toHaveStyle: toHaveStyle,
23+
legacy_toHaveTextContent: toHaveTextContent,
24+
});

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"noEmit": false,
1414
"outDir": "dist"
1515
},
16-
"files": ["./extend-expect.d.ts"],
16+
"files": ["./extend-expect.d.ts", "./legacy-extend-expect.d.ts"],
1717
"exclude": ["node_modules", "android", "ios"],
1818
"include": ["src/**/*", "setup-test.ts"]
1919
}

0 commit comments

Comments
 (0)