Рубрики
Без рубрики

Почему тесты терпят неудачу только во время предварительной фиксации ?

Мои модульные тесты успешно выполнялись сами по себе, но шаг модульного тестирования не выполнялся во время предварительной фиксации. Сбивает с толку ? Да. Пока я не выяснил почему

Автор оригинала: Mandar Vaze.

Недавно я столкнулся (как мне показалось) со странным поведением.

Я использую pre-commit для всех моих коммитов git, и одним из шагов является обеспечение прохождения всех модульных тестов.

У меня также есть make target для запуска только модульных тестов.

Каждый раз, когда я пытался совершить коммит, шаг модульного теста в pre-commit завершался неудачей, что указывает на то, что модульные тесты не прошли. Но когда я запускаю make unit это пройдет. 🤷

Во время предварительной фиксации pytest вернется с кодом выхода 5 – что указывает на отсутствие тестов . Таким образом, не было того, что один или несколько тестов не прошли во время предварительной фиксации -но ничего не было протестировано – и из – за ненулевого кода выхода предварительная фиксация предотвратила фиксацию (как и должно быть)

первопричина

Оказывается, pre-commit выполняет все шаги только для измененных файлов. Он передает список измененных файлов каждой команде – неявно. То есть, если вы не настроите его на это. 😀

Поэтому, когда я изменяю исходный файл (не тестовый файл), pytest “игнорирует” файл, поскольку он не будет содержать никаких тестов.

Решение

Теперь, когда мы понимаем “почему” – решение очевидно.

Пациент: Доктор, мне больно, когда я это делаю это

Доктор: Тогда не делай этого.

Для шага модульного теста попросите pre-commit не передавать имена файлов в качестве аргумента через pass_filenames: false

Ссылка

  • [Stackoverflow](https://github.com/pre-commit/pre-commit/issues/1130

Кредит на изображение Пит Линфорт на Pixabay