Testing
Lexical relies on tests to ensure that changes don't break anything, using a mix of unit and end-to-end tests.
Unit tests
We use Jest to run unit tests in core (lexical
package). The goal is to have a well tested API, enabling us to add or modify features without breaking it.
To run the tests use:
npm run test-unit
Unit tests can be found in this directory.
End-to-end (E2E) tests
We use Playwright for running E2E tests in Chromium, Firefox and WebKit. Before running these tests, make sure to install the necessary browsers using the following command:
npx playwright install
These tests run in the lexical-playground
package and are divided into proactive and reactive tests (e2e
and regression
directories).
The goal for this type of test is to validate the behavior of Lexical in a browser, without necessarily knowing how the internals work.
To run E2E tests use:
npm run start &
npm run test-e2e-chromium # or -firefox, -webkit
E2E tests can be found in this directory
General guidelines
When writing tests, please follow these practices:
- New features must include tests.
- No test is too small or too big to be included. If it can break, add a test.
- Do not merge pull requests with failing tests, this can block other people and releases.
- Be mindful with your abstractions: sometimes it's convenient to create abstractions/utils to make test files smaller and less repetitive. Please make sure that they are simple and easy to follow.