Skip to content

Commit 01ada70

Browse files
author
Alyar
committed
add the 'wrapInstance' helper for jest tests
1 parent c33fe9e commit 01ada70

3 files changed

Lines changed: 20 additions & 18 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { jest } from '@jest/globals';
2+
3+
export default function wrapInstance<T extends object>(instance: T): T {
4+
const proto = Object.getPrototypeOf(instance);
5+
6+
(Object.getOwnPropertyNames(proto) as (keyof T)[]).forEach((key): void => {
7+
const originalValue = instance[key];
8+
if (typeof originalValue === 'function' && key !== 'constructor') {
9+
const originalMethod = originalValue as (...a: unknown[]) => unknown;
10+
11+
instance[key] = jest.fn(originalMethod.bind(instance)) as T[typeof key];
12+
}
13+
});
14+
15+
return instance;
16+
}

packages/devextreme/js/__internal/grids/grid_core/ai_column/ai_prompt_editor/ai_prompt_editor.integration.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import $ from '@js/core/renderer';
77
import Popup from '@js/ui/popup';
88
import ProgressBar from '@js/ui/progress_bar';
99
import TextArea from '@js/ui/text_area';
10-
import { AiPromptEditorModel } from '@ts/grids/grid_core//__tests__/__mock__/model/ai_prompt_editor';
10+
import { AiPromptEditorModel } from '@ts/grids/grid_core/__tests__/__mock__/model/ai_prompt_editor';
1111

1212
import { AiPromptEditor } from './ai_prompt_editor';
1313
import type { AiPromptEditorOptions } from './types';

packages/devextreme/js/__internal/grids/grid_core/ai_column/m_ai_column_view.test.ts

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ import fx from '@js/common/core/animation/fx';
1111
import type { dxElementWrapper } from '@js/core/renderer';
1212
import $ from '@js/core/renderer';
1313
import Callbacks from '@js/core/utils/callbacks';
14-
import { AiPromptEditorModel } from '@ts/grids/grid_core//__tests__/__mock__/model/ai_prompt_editor';
14+
import wrapInstanceWithMocks from '@ts/grids/grid_core/__tests__/__mock__/helpers/wrapInstance';
15+
import { AiPromptEditorModel } from '@ts/grids/grid_core/__tests__/__mock__/model/ai_prompt_editor';
1516

1617
import type { Column } from '../columns_controller/m_columns_controller';
1718
import { AiPromptEditor } from './ai_prompt_editor/ai_prompt_editor';
@@ -20,26 +21,11 @@ import { AiColumnView } from './m_ai_column_view';
2021

2122
jest.mock('./ai_prompt_editor/ai_prompt_editor', (): any => {
2223
const original = jest.requireActual<any>('./ai_prompt_editor/ai_prompt_editor');
23-
const wrapInstanceWithMocks = (instance: AiPromptEditor): AiPromptEditor => {
24-
const proto = Object.getPrototypeOf(instance);
25-
26-
Object.getOwnPropertyNames(proto).forEach((key): void => {
27-
const originalMethod = instance[key];
28-
if (typeof originalMethod === 'function' && key !== 'constructor') {
29-
instance[key] = jest.fn(function mockMethod(...args: any[]) {
30-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
31-
return originalMethod.apply(this, args) as any;
32-
});
33-
}
34-
});
35-
36-
return instance;
37-
};
3824

3925
return {
4026
...original,
4127
AiPromptEditor: jest.fn((...args: any[]) => {
42-
const instance = new original.AiPromptEditor(...args);
28+
const instance: AiPromptEditor = new original.AiPromptEditor(...args);
4329
return wrapInstanceWithMocks(instance);
4430
}),
4531
};

0 commit comments

Comments
 (0)