mirror of
https://github.com/elastic/kibana.git
synced 2025-06-28 03:01:21 -04:00
## Summary This PR aims at relocating some of the Kibana modules (plugins and packages) into a new folder structure, according to the _Sustainable Kibana Architecture_ initiative. > [!IMPORTANT] > * We kindly ask you to: > * Manually fix the errors in the error section below (if there are any). > * Search for the `packages[\/\\]` and `plugins[\/\\]` patterns in the source code (Babel and Eslint config files), and update them appropriately. > * Manually review `.buildkite/scripts/pipelines/pull_request/pipeline.ts` to ensure that any CI pipeline customizations continue to be correctly applied after the changed path names > * Review all of the updated files, specially the `.ts` and `.js` files listed in the sections below, as some of them contain relative paths that have been updated. > * Think of potential impact of the move, including tooling and configuration files that can be pointing to the relocated modules. E.g.: > * customised eslint rules > * docs pointing to source code > [!NOTE] > * This PR has been auto-generated. > * Any manual contributions will be lost if the 'relocate' script is re-run. > * Try to obtain the missing reviews / approvals before applying manual fixes, and/or keep your changes in a .patch / git stash. > * Please use [#sustainable_kibana_architecture](https://elastic.slack.com/archives/C07TCKTA22E) Slack channel for feedback. Are you trying to rebase this PR to solve merge conflicts? Please follow the steps describe [here](https://elastic.slack.com/archives/C07TCKTA22E/p1734019532879269?thread_ts=1734019339.935419&cid=C07TCKTA22E). #### 12 plugin(s) are going to be relocated: | Id | Target folder | | -- | ------------- | | `@kbn/data-view-editor-plugin` | `src/platform/plugins/shared/data_view_editor` | | `@kbn/data-view-field-editor-plugin` | `src/platform/plugins/shared/data_view_field_editor` | | `@kbn/data-view-management-plugin` | `src/platform/plugins/shared/data_view_management` | | `@kbn/data-views-plugin` | `src/platform/plugins/shared/data_views` | | `@kbn/discover-enhanced-plugin` | `x-pack/platform/plugins/private/discover_enhanced` | | `@kbn/discover-plugin` | `src/platform/plugins/shared/discover` | | `@kbn/discover-shared-plugin` | `src/platform/plugins/shared/discover_shared` | | `@kbn/field-formats-plugin` | `src/platform/plugins/shared/field_formats` | | `@kbn/saved-objects-finder-plugin` | `src/platform/plugins/shared/saved_objects_finder` | | `@kbn/saved-search-plugin` | `src/platform/plugins/shared/saved_search` | | `@kbn/unified-doc-viewer-plugin` | `src/platform/plugins/shared/unified_doc_viewer` | | `@kbn/unified-histogram-plugin` | `src/platform/plugins/shared/unified_histogram` | #### 18 packages(s) are going to be relocated: | Id | Target folder | | -- | ------------- | | `@kbn/content-management-utils` | `src/platform/packages/shared/kbn-content-management-utils` | | `@kbn/data-view-utils` | `src/platform/packages/shared/kbn-data-view-utils` | | `@kbn/datemath` | `src/platform/packages/shared/kbn-datemath` | | `@kbn/deeplinks-analytics` | `src/platform/packages/shared/deeplinks/analytics` | | `@kbn/default-nav-analytics` | `src/platform/packages/private/default-nav/analytics` | | `@kbn/discover-utils` | `src/platform/packages/shared/kbn-discover-utils` | | `@kbn/es-query` | `src/platform/packages/shared/kbn-es-query` | | `@kbn/field-types` | `src/platform/packages/shared/kbn-field-types` | | `@kbn/field-utils` | `src/platform/packages/shared/kbn-field-utils` | | `@kbn/react-field` | `src/platform/packages/shared/kbn-react-field` | | `@kbn/resizable-layout` | `src/platform/packages/shared/kbn-resizable-layout` | | `@kbn/search-errors` | `src/platform/packages/shared/kbn-search-errors` | | `@kbn/search-response-warnings` | `src/platform/packages/shared/kbn-search-response-warnings` | | `@kbn/search-types` | `src/platform/packages/shared/kbn-search-types` | | `@kbn/unified-data-table` | `src/platform/packages/shared/kbn-unified-data-table` | | `@kbn/unified-doc-viewer` | `src/platform/packages/shared/kbn-unified-doc-viewer` | | `@kbn/unified-field-list` | `src/platform/packages/shared/kbn-unified-field-list` | | `@kbn/unsaved-changes-badge` | `src/platform/packages/private/kbn-unsaved-changes-badge` | <details > <summary>Updated references</summary> ``` ./.buildkite/scripts/steps/functional/scout_ui_tests.sh ./.eslintrc.js ./.i18nrc.json ./docs/developer/advanced/sharing-saved-objects.asciidoc ./docs/developer/architecture/core/saved-objects-service.asciidoc ./docs/developer/best-practices/navigation.asciidoc ./docs/developer/contributing/development-unit-tests.asciidoc ./docs/developer/plugin-list.asciidoc ./examples/unified_doc_viewer/README.md ./examples/unified_field_list_examples/public/plugin.ts ./legacy_rfcs/text/0015_bazel.md ./oas_docs/scripts/merge_ess_oas.js ./oas_docs/scripts/merge_serverless_oas.js ./package.json ./packages/kbn-repo-packages/package-map.json ./packages/kbn-synthetic-package-map/synthetic-packages.json ./packages/kbn-test/src/functional_tests/lib/babel_register_for_test_plugins.js ./packages/kbn-ts-projects/config-paths.json ./packages/kbn-ui-shared-deps-src/BUILD.bazel ./packages/kbn-unified-field-list/src/services/field_examples_calculator/field_examples_calculator.ts ./packages/shared-ux/prompt/no_data_views/types/index.d.ts ./src/dev/code_coverage/ingest_coverage/__tests__/mocks/team_assign_mock.txt ./src/dev/storybook/aliases.ts ./src/platform/packages/private/default-nav/analytics/jest.config.js ./src/platform/packages/private/kbn-unsaved-changes-badge/jest.config.js ./src/platform/packages/shared/deeplinks/analytics/jest.config.js ./src/platform/packages/shared/kbn-content-management-utils/jest.config.js ./src/platform/packages/shared/kbn-data-view-utils/jest.config.js ./src/platform/packages/shared/kbn-datemath/jest.config.js ./src/platform/packages/shared/kbn-discover-utils/jest.config.js ./src/platform/packages/shared/kbn-es-query/jest.config.js ./src/platform/packages/shared/kbn-field-types/jest.config.js ./src/platform/packages/shared/kbn-field-utils/jest.config.js ./src/platform/packages/shared/kbn-react-field/jest.config.js ./src/platform/packages/shared/kbn-resizable-layout/jest.config.js ./src/platform/packages/shared/kbn-search-errors/jest.config.js ./src/platform/packages/shared/kbn-search-response-warnings/jest.config.js ./src/platform/packages/shared/kbn-search-types/jest.config.js ./src/platform/packages/shared/kbn-unified-data-table/jest.config.js ./src/platform/packages/shared/kbn-unified-doc-viewer/jest.config.js ./src/platform/packages/shared/kbn-unified-field-list/jest.config.js ./src/platform/plugins/shared/data_view_editor/jest.config.js ./src/platform/plugins/shared/data_view_field_editor/jest.config.js ./src/platform/plugins/shared/data_view_management/jest.config.js ./src/platform/plugins/shared/data_views/jest.config.js ./src/platform/plugins/shared/discover/README.md ./src/platform/plugins/shared/discover/jest.config.js ./src/platform/plugins/shared/discover/public/context_awareness/README.md ./src/platform/plugins/shared/discover_shared/README.md ./src/platform/plugins/shared/discover_shared/jest.config.js ./src/platform/plugins/shared/field_formats/jest.config.js ./src/platform/plugins/shared/saved_objects_finder/jest.config.js ./src/platform/plugins/shared/saved_search/jest.config.js ./src/platform/plugins/shared/unified_doc_viewer/jest.config.js ./src/platform/plugins/shared/unified_histogram/jest.config.js ./tsconfig.base.json ./tsconfig.refs.json ./x-pack/.i18nrc.json ./x-pack/platform/plugins/private/discover_enhanced/jest.config.js ./x-pack/platform/plugins/private/discover_enhanced/ui_tests/README.md ./x-pack/solutions/security/plugins/timelines/common/search_strategy/index_fields/index.ts ./yarn.lock .github/CODEOWNERS ``` </details><details > <summary>Updated relative paths</summary> ``` src/platform/packages/private/default-nav/analytics/jest.config.js:12 src/platform/packages/private/default-nav/analytics/tsconfig.json:2 src/platform/packages/private/kbn-unsaved-changes-badge/jest.config.js:12 src/platform/packages/private/kbn-unsaved-changes-badge/tsconfig.json:2 src/platform/packages/shared/deeplinks/analytics/jest.config.js:12 src/platform/packages/shared/deeplinks/analytics/tsconfig.json:2 src/platform/packages/shared/kbn-content-management-utils/jest.config.js:12 src/platform/packages/shared/kbn-content-management-utils/tsconfig.json:2 src/platform/packages/shared/kbn-data-view-utils/jest.config.js:12 src/platform/packages/shared/kbn-data-view-utils/tsconfig.json:2 src/platform/packages/shared/kbn-datemath/jest.config.js:22 src/platform/packages/shared/kbn-datemath/tsconfig.json:2 src/platform/packages/shared/kbn-discover-utils/jest.config.js:12 src/platform/packages/shared/kbn-discover-utils/tsconfig.json:2 src/platform/packages/shared/kbn-es-query/jest.config.js:12 src/platform/packages/shared/kbn-es-query/tsconfig.json:2 src/platform/packages/shared/kbn-field-types/jest.config.js:12 src/platform/packages/shared/kbn-field-types/tsconfig.json:2 src/platform/packages/shared/kbn-field-utils/jest.config.js:12 src/platform/packages/shared/kbn-field-utils/tsconfig.json:2 src/platform/packages/shared/kbn-react-field/jest.config.js:12 src/platform/packages/shared/kbn-react-field/tsconfig.json:2 src/platform/packages/shared/kbn-resizable-layout/jest.config.js:12 src/platform/packages/shared/kbn-resizable-layout/tsconfig.json:2 src/platform/packages/shared/kbn-search-errors/jest.config.js:12 src/platform/packages/shared/kbn-search-errors/tsconfig.json:2 src/platform/packages/shared/kbn-search-response-warnings/jest.config.js:12 src/platform/packages/shared/kbn-search-response-warnings/tsconfig.json:2 src/platform/packages/shared/kbn-search-types/jest.config.js:12 src/platform/packages/shared/kbn-search-types/tsconfig.json:2 src/platform/packages/shared/kbn-unified-data-table/jest.config.js:12 src/platform/packages/shared/kbn-unified-data-table/tsconfig.json:2 src/platform/packages/shared/kbn-unified-doc-viewer/jest.config.js:12 src/platform/packages/shared/kbn-unified-doc-viewer/tsconfig.json:2 src/platform/packages/shared/kbn-unified-field-list/jest.config.js:12 src/platform/packages/shared/kbn-unified-field-list/tsconfig.json:2 src/platform/plugins/shared/data_view_editor/jest.config.js:12 src/platform/plugins/shared/data_view_editor/tsconfig.json:2 src/platform/plugins/shared/data_view_field_editor/jest.config.js:12 src/platform/plugins/shared/data_view_field_editor/tsconfig.json:2 src/platform/plugins/shared/data_view_field_editor/tsconfig.json:7 src/platform/plugins/shared/data_view_management/jest.config.js:12 src/platform/plugins/shared/data_view_management/tsconfig.json:2 src/platform/plugins/shared/data_views/jest.config.js:12 src/platform/plugins/shared/data_views/tsconfig.json:2 src/platform/plugins/shared/discover/jest.config.js:12 src/platform/plugins/shared/discover/public/application/context/context_app.scss:1 src/platform/plugins/shared/discover/public/application/main/components/layout/discover_layout.scss:1 src/platform/plugins/shared/discover/public/context_awareness/README.md:118 src/platform/plugins/shared/discover/public/context_awareness/README.md:119 src/platform/plugins/shared/discover/tsconfig.json:10 src/platform/plugins/shared/discover/tsconfig.json:2 src/platform/plugins/shared/discover_shared/jest.config.js:12 src/platform/plugins/shared/discover_shared/tsconfig.json:10 src/platform/plugins/shared/discover_shared/tsconfig.json:2 src/platform/plugins/shared/field_formats/jest.config.js:12 src/platform/plugins/shared/field_formats/tsconfig.json:2 src/platform/plugins/shared/saved_objects_finder/jest.config.js:12 src/platform/plugins/shared/saved_objects_finder/tsconfig.json:2 src/platform/plugins/shared/saved_search/jest.config.js:12 src/platform/plugins/shared/saved_search/tsconfig.json:2 src/platform/plugins/shared/saved_search/tsconfig.json:6 src/platform/plugins/shared/unified_doc_viewer/jest.config.js:12 src/platform/plugins/shared/unified_doc_viewer/tsconfig.json:2 src/platform/plugins/shared/unified_doc_viewer/tsconfig.json:6 src/platform/plugins/shared/unified_histogram/jest.config.js:12 src/platform/plugins/shared/unified_histogram/tsconfig.json:2 src/platform/plugins/shared/unified_histogram/tsconfig.json:6 x-pack/platform/plugins/private/discover_enhanced/jest.config.js:10 x-pack/platform/plugins/private/discover_enhanced/tsconfig.json:2 ``` </details> --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
88 lines
No EOL
3.8 KiB
Text
88 lines
No EOL
3.8 KiB
Text
[[development-unit-tests]]
|
||
== Unit testing frameworks
|
||
|
||
{kib} is doing unit testing doing `Jest`.
|
||
|
||
[discrete]
|
||
== Jest
|
||
Jest tests are stored in the same directory as source code files with the `.test.{js,mjs,ts,tsx}` suffix.
|
||
|
||
Each plugin and package contains it's own `jest.config.js` file to define its root, and any overrides
|
||
to the jest-preset provided by `@kbn/test`. When working on a single plugin or package, you will find
|
||
it's more efficient to supply the Jest configuration file when running.
|
||
|
||
["source","shell"]
|
||
-----------
|
||
yarn jest --config src/platform/plugins/shared/discover/jest.config.js
|
||
-----------
|
||
|
||
[discrete]
|
||
==== Writing Jest Unit Tests
|
||
|
||
In order to write those tests there are two main things you need to be aware of.
|
||
The first one is the different between `jest.mock` and `jest.doMock`
|
||
and the second one our `jest mocks file pattern`. As we are running `js` and `ts`
|
||
test files with `babel-jest` both techniques are needed
|
||
specially for the tests implemented on Typescript in order to benefit from the
|
||
auto-inference types feature.
|
||
|
||
[discrete]
|
||
==== Jest.mock vs Jest.doMock
|
||
|
||
Both methods are essentially the same on their roots however the `jest.mock`
|
||
calls will get hoisted to the top of the file and can only reference variables
|
||
prefixed with `mock`. On the other hand, `jest.doMock` won't be hoisted and can
|
||
reference pretty much any variable we want, however we have to assure those referenced
|
||
variables are instantiated at the time we need them which lead us to the next
|
||
section where we'll talk about our jest mock files pattern.
|
||
|
||
[discrete]
|
||
==== Jest Mock Files Pattern
|
||
|
||
Specially on typescript it is pretty common to have in unit tests
|
||
`jest.doMock` calls which reference for example imported types. Any error
|
||
will thrown from doing that however the test will fail. The reason behind that
|
||
is because despite the `jest.doMock` isn't being hoisted by `babel-jest` the
|
||
import with the types we are referencing will be hoisted to the top and at the
|
||
time we'll call the function that variable would not be defined.
|
||
|
||
In order to prevent that we develop a protocol that should be followed:
|
||
|
||
- Each module could provide a standard mock in `mymodule.mock.ts` in case
|
||
there are other tests that could benefit from using definitions here.
|
||
This file would not have any `jest.mock` calls, just dummy objects.
|
||
|
||
- Each test defines its mocks in `mymodule.test.mocks.ts`. This file
|
||
could import relevant mocks from the generalised module's mocks
|
||
file `(*.mock.ts)` and call `jest.mock` for each of them. If there is
|
||
any relevant dummy mock objects to generalise (and to be used by
|
||
other tests), the dummy objects could be defined directly on this file.
|
||
|
||
- Each test would import its mocks from the test mocks
|
||
file mymodule.test.mocks.ts. `mymodule.test.ts` has an import
|
||
like: `import * as Mocks from './mymodule.test.mocks'`,
|
||
`import { mockX } from './mymodule.test.mocks'`
|
||
or just `import './mymodule.test.mocks'` if there isn't anything
|
||
exported to be used.
|
||
|
||
[discrete]
|
||
[[debugging-unit-tests]]
|
||
=== Debugging Unit Tests
|
||
|
||
The standard `yarn test` task runs several sub tasks and can take
|
||
several minutes to complete, making debugging failures pretty painful.
|
||
In order to ease the pain specialized tasks provide alternate methods
|
||
for running the tests.
|
||
|
||
You could also add the `--debug` option so that `node` is run using
|
||
the `--inspect-brk` flag. You’ll need to connect a remote debugger such
|
||
as https://github.com/node-inspector/node-inspector[`node-inspector`]
|
||
to proceed in this mode.
|
||
|
||
[discrete]
|
||
=== Unit Testing Plugins
|
||
|
||
Even when using
|
||
https://github.com/elastic/kibana/tree/main/packages/kbn-plugin-generator[Kibana
|
||
plugin generator] we do not enforce a way for unit testing your plugin. Please setup and you use
|
||
the tools of your choice. If the plugin will live inside the Kibana repo `Jest` must be used. |