Testing#
edx-enterprise has an assortment of test cases and code quality checks to catch potential problems during development.
Running all of the python tests#
To run all unit tests and quality checks in the version of Python you chose for your virtualenv.
Alternatively, docker can be used to provide a containerized shell to run the commands below inside.
$ make test-shell
$ make validate
To run just the unit tests:
$ make test
To run just the unit tests and check diff coverage
$ make diff_cover
To run the unit tests under every supported Python version and the code quality checks:
$ make test-all
To run all tests under certain python versions and edx-platform dependency environments:
$ tox -e py35-master # run all tests under python 3.5 and master branch dependencies
Code coverage#
To generate and open an HTML report of how much of the code is covered by test cases:
$ make coverage
There is a useful pytest.local.ini
file that helps with looking at coverage of only a single module at a time:
$ pytest tests/test_enterprise/api -c pytest.local.ini --cov=enterprise.api
Running subsets of tests#
Various options to run only subset of tests:
$ pytest tests/test_admin/ # run all tests in tests/admin folder
$ pytest tests/test_enterprise/api # run all tests in tests/test_enterprise_api folder
$ pytest tests/test_enterprise/api/test_permissions.py # run all the tests in the test_permissions.py file
# run all tests in TestEnterpriseCustomer test suite file
$ pytest tests/test_models.py::TestEnterpriseCustomer
# run only `test_ready_connects_user_post_save_handler` in `TestEnterpriseConfig` suite
$ pytest tests/test_apps.py::TestEnterpriseConfig::test_ready_connects_user_post_save_handler
Quality#
To run just the code quality checks:
$ tox -e quality
To run quality checks on specific files:
# run the PEP8-style checks on one file (fast)
$ pycodestyle enterprise/api/v1/views.py
# run pylint on one file (not as fast)
$ pylint enterprise/api/v1/views.py
# use isort to fix imports, --check-only means see what isort would change without actually changing it
$ isort --check-only enterprise/api/v1/views.py
# use isort to actually change the file(s)
$ isort enterprise/api/v1/views.py enterprise/api/v1/permissions.py