Skip to content

Commit c86b75c

Browse files
author
EBAM006
committed
refactor: improve defaultHidden computing
1 parent a7c9c76 commit c86b75c

File tree

3 files changed

+32
-24
lines changed

3 files changed

+32
-24
lines changed

src/__tests__/config.test.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ beforeEach(() => {
66

77
test('getConfig() returns existing configuration', () => {
88
expect(getConfig().asyncUtilTimeout).toEqual(1000);
9+
expect(getConfig().defaultIncludeHiddenElements).toEqual(true);
910
});
1011

1112
test('configure() overrides existing config values', () => {
@@ -14,7 +15,6 @@ test('configure() overrides existing config values', () => {
1415
expect(getConfig()).toEqual({
1516
asyncUtilTimeout: 5000,
1617
defaultDebugOptions: { message: 'debug message' },
17-
defaultHidden: true,
1818
defaultIncludeHiddenElements: true,
1919
});
2020
});
@@ -26,11 +26,15 @@ test('resetToDefaults() resets config to defaults', () => {
2626
defaultHidden: false,
2727
});
2828
expect(getConfig().asyncUtilTimeout).toEqual(5000);
29-
expect(getConfig().defaultHidden).toEqual(false);
3029
expect(getConfig().defaultIncludeHiddenElements).toEqual(false);
3130

3231
resetToDefaults();
3332
expect(getConfig().asyncUtilTimeout).toEqual(1000);
34-
expect(getConfig().defaultHidden).toEqual(true);
3533
expect(getConfig().defaultIncludeHiddenElements).toEqual(true);
3634
});
35+
36+
test('configure handles alias option defaultHidden', () => {
37+
expect(getConfig().defaultIncludeHiddenElements).toEqual(true);
38+
configure({ defaultHidden: false });
39+
expect(getConfig().defaultIncludeHiddenElements).toEqual(false);
40+
});

src/config.ts

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,41 @@ export type Config = {
77
/** Default includeHiddenElements value for all queries */
88
defaultIncludeHiddenElements: boolean;
99

10+
/** Default options for `debug` helper. */
11+
defaultDebugOptions?: Partial<DebugOptions>;
12+
};
13+
14+
export type ConfigAliasOptions = {
1015
/** Default hidden value for all queries, alias to defaultIncludeHiddenElements to respect react-testing-library API
1116
* WARNING: if both defaultHidden and defaultIncludeHiddenElements values are defined,
1217
* then defaultIncludeHiddenElements will take precedence
1318
*/
1419
defaultHidden: boolean;
15-
16-
/** Default options for `debug` helper. */
17-
defaultDebugOptions?: Partial<DebugOptions>;
1820
};
1921

2022
const defaultConfig: Config = {
2123
asyncUtilTimeout: 1000,
22-
defaultHidden: true,
2324
defaultIncludeHiddenElements: true,
2425
};
2526

2627
let config = { ...defaultConfig };
2728

28-
export function configure(options: Partial<Config>) {
29-
if (
30-
options.defaultHidden !== undefined &&
31-
options.defaultIncludeHiddenElements === undefined
32-
) {
33-
options.defaultIncludeHiddenElements = options.defaultHidden;
34-
}
35-
36-
if (
37-
options.defaultIncludeHiddenElements !== undefined &&
38-
options.defaultHidden === undefined
39-
) {
40-
options.defaultHidden = options.defaultIncludeHiddenElements;
41-
}
29+
export function configure(options: Partial<Config & ConfigAliasOptions>) {
30+
const { defaultHidden, ...restOptions } = options;
31+
32+
const defaultIncludeHiddenElements =
33+
restOptions.defaultIncludeHiddenElements ??
34+
defaultHidden ??
35+
config.defaultIncludeHiddenElements;
36+
37+
const optionsToSet = {
38+
...restOptions,
39+
defaultIncludeHiddenElements,
40+
};
4241

4342
config = {
4443
...config,
45-
...options,
44+
...optionsToSet,
4645
};
4746
}
4847

typings/index.flow.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -468,12 +468,17 @@ declare module '@testing-library/react-native' {
468468
declare interface Config {
469469
asyncUtilTimeout: number;
470470
defaultIncludeHiddenElements: boolean;
471+
defaultDebugOptions?: $Shape<DebugOptions>;
472+
}
473+
474+
declare interface ConfigAliasOptions {
471475
/** Alias to `defaultIncludeHiddenElements` for RTL compatibility */
472476
defaultHidden: boolean;
473-
defaultDebugOptions?: $Shape<DebugOptions>;
474477
}
475478

476-
declare export var configure: (options: $Shape<Config>) => void;
479+
declare export var configure: (
480+
options: $Shape<Config & ConfigAliasOptions>
481+
) => void;
477482
declare export var resetToDefaults: () => void;
478483

479484
declare export var act: (callback: () => void) => Thenable;

0 commit comments

Comments
 (0)