diff --git a/docs/history/hatch.md b/docs/history/hatch.md index 314a387cb..98392bde2 100644 --- a/docs/history/hatch.md +++ b/docs/history/hatch.md @@ -8,10 +8,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## Unreleased -***Fixed*** + +***Fixed:*** + +- Erase stale coverage data before running `hatch test --cover`. - Fix environment creation crashing when a metadata hook exists that doesn’t happen to be installed in the `hatch` CLI’s environment. + ## [1.17.1](https://github.com/pypa/hatch/releases/tag/hatch-v1.17.1) - 2026-07-08 ## {: #hatch-v1.17.1 } ***Fixed*** diff --git a/src/hatch/cli/test/__init__.py b/src/hatch/cli/test/__init__.py index d89c680d7..291267d7e 100644 --- a/src/hatch/cli/test/__init__.py +++ b/src/hatch/cli/test/__init__.py @@ -180,6 +180,10 @@ def test( if cover: patched_coverage.write_config_file() + for context in app.runner_context([selected_envs[0]]): + context.add_shell_command("coverage erase") + context.env_vars["COVERAGE_RCFILE"] = coverage_config_file + for context in app.runner_context(selected_envs, ignore_compat=multiple_possible, display_header=multiple_possible): internal_arguments: list[str] = list(context.env.config.get("extra-args", [])) diff --git a/tests/cli/test/test_test.py b/tests/cli/test/test_test.py index 912324366..adb10799d 100644 --- a/tests/cli/test/test_test.py +++ b/tests/cli/test/test_test.py @@ -194,6 +194,7 @@ def test_flag(self, hatch, temp_dir, config_file, env_run, mocker): assert not result.output assert env_run.call_args_list == [ + mocker.call("coverage erase", shell=True), mocker.call("coverage run -m pytest -p no:randomly tests", shell=True), mocker.call("coverage combine", shell=True), mocker.call("coverage report", shell=True), @@ -230,6 +231,7 @@ def test_flag_with_arguments(self, hatch, temp_dir, config_file, env_run, mocker assert not result.output assert env_run.call_args_list == [ + mocker.call("coverage erase", shell=True), mocker.call("coverage run -m pytest -p no:randomly --flag -- arg1 arg2", shell=True), mocker.call("coverage combine", shell=True), mocker.call("coverage report", shell=True), @@ -266,6 +268,7 @@ def test_quiet_implicitly_enables(self, hatch, temp_dir, config_file, env_run, m assert not result.output assert env_run.call_args_list == [ + mocker.call("coverage erase", shell=True), mocker.call("coverage run -m pytest -p no:randomly tests", shell=True), mocker.call("coverage combine", shell=True), ] @@ -303,6 +306,7 @@ def test_legacy_config_define_section(self, hatch, temp_dir, config_file, env_ru assert not result.output assert env_run.call_args_list == [ + mocker.call("coverage erase", shell=True), mocker.call("coverage run -m pytest -p no:randomly tests", shell=True), mocker.call("coverage combine", shell=True), mocker.call("coverage report", shell=True), @@ -341,6 +345,7 @@ def test_legacy_config_enable_parallel(self, hatch, temp_dir, config_file, env_r assert not result.output assert env_run.call_args_list == [ + mocker.call("coverage erase", shell=True), mocker.call("coverage run -m pytest -p no:randomly tests", shell=True), mocker.call("coverage combine", shell=True), mocker.call("coverage report", shell=True), @@ -809,6 +814,7 @@ def test_coverage(self, hatch, temp_dir, config_file, env_run, mocker): assert not result.output assert env_run.call_args_list == [ + mocker.call("coverage erase", shell=True), mocker.call("test with coverage", shell=True), mocker.call("combine coverage", shell=True), mocker.call("show coverage", shell=True),