Running the Automated Tests¶
JavaScript¶
Validating JavaScript¶
We run our JavaScript code in the frontend through ESLint to ensure that new code has a consistent style and doesn't suffer from common errors. ESLint will run automatically when you build the JavaScript code or run the development server. A production build will fail if your code does not match the style requirements.
To run ESLint by itself, you may run the lint task:
yarn lint
Or to automatically fix issues found (where possible):
yarn lint --fix
You can also check against Prettier:
yarn format:check
and to have it actually fix (to the best of its ability) any format issues, just do:
yarn format
See the code style section for more details.
Running the Jest front-end tests¶
The unit tests for the UI are run with [Jest]. The tests are written with react testing library. For the integration tests PollyJS is used to mock APIs.
Integration tests are useful when testing higher level components that would be hard to setup with fetch mock.
They use PollyJS because it helps to automatically record and replay requests/responses.
To refresh the PollyJS recordings (usually when an endpoint response changes), just delete the recordings folder and run yarn test:integration
again like described below.
To run the tests:
- If you haven't already done so, install local dependencies by running
yarn install
from the project root. - For unit tests run
yarn test
to execute the tests. - For integration tests run
yarn test:integration
to execute the tests.
While working on the frontend, you may wish to watch JavaScript files and re-run the unit tests automatically when files change. To do this, you may run one of the following commands:
yarn test:watch
The tests will perform an initial run and then re-execute each time a project file is changed.
Python¶
To run all Python tests, including linting, sorting, etc:
% pip install tox
% tox
NOTE: For instructions on how to run tests outside of Docker look at tests/README.md. Running them within Docker is still the recommended option.
Running a specific set of Python tests¶
Here are some examples of ways to run the python tests with varying levels of specificity:
All tests:
docker-compose run backend pytest tests/
Just /etl
tests
docker-compose run backend pytest tests/etl/
Just the test_ingest_pending_pulse_job
within the /etl
tests
docker-compose run backend pytest tests/ -k test_ingest_pending_pulse_job