SW/Git

Git : Push 전에 PHPUnit 테스트를 자동으로 실행 방법 : 예제, 구현

얇은생각 2020. 7. 13. 07:30
반응형

Git : Push 전에 PHPUnit 테스트를 자동으로 실행 방법 : 예제, 구현

 

 

강력한 테스트 제품군이 있는 프로젝트에서 작업할 때 리포지토리에 푸시하는 모든 작업이 프로젝트의 테스트에 영향을 미치지 않도록 해야 합니다.

즉, git push를 미리 만들기 전에 phpunit을 실행하고 모든 테스트를 통과했는지 확인해야 합니다. 이 튜토리얼에서는 git 리포지토리에 규칙을 추가하여 테스트가 통과되지 않으면 리포지토리에 새 코드를 넣을 수 없도록 하고 이를 위해 git 후크를 사용합니다.

 

 

Git Hooks

Git 후크를 사용하면 git 프로세스의 여러 단계에서 이벤트를 실행할 수 있습니다. 이러한 이벤트에서 명령이 실패할 경우 프로세스를 종료할 명령을 실행할 수 있습니다.

이것들은 사용할 수 있는 git 훅입니다.

  • applypatch-msg
  • commit-msg
  • post-update
  • pre-applypatch
  • pre-commit
  • pre-commit
  • prepare-commit-msg
  • pre-push
  • pre-rebase
  • pre-receive
  • update

이러한 각 항목은 git 프로세스에서 서로 다른 시간에 트리거됩니다. 모든 git 후크를 보려면 프로젝트의 루트로 이동하여 ls .git/hooks/를 입력합니다. 이 경우 사용 가능한 git 후크 목록이 표시됩니다. 

phpunit 테스트를 실행하기 위해 리포지토리로 이동하기 전에 실행되는 pre-push 훅을 사용할 것입니다.

 

 

Pre-push

.git/hooks/pre-push에 새 파일을 추가하고 파일을 열고 다음을 추가합니다.

#!/bin/bash

git diff --cached --name-only | while read FILE; do
if [[ "$FILE" =~ ^.+(php|inc|module|install|test)$ ]]; then
    echo "Running tests..."
    cd "${0%/*}/.."
    phpunit 1> /dev/null
    if [ $? -ne 0 ]; then
      echo -e "\e[1;31m\tUnit tests failed ! Aborting commit.\e[0m" >&2
      exit 1;
    fi
fi
done || exit $?

 

 

git diff --cached --name-only | while read FILE; do

커밋에서 변경된 모든 파일을 반환합니다.

 

 

if [[ "$FILE" =~ ^.+(php|inc|module|install|test)$ ]]; then

그러면 위의 패턴에서만 일치하도록 하여 php 또는 테스트 파일이 변경되었음을 알 수 있으므로 테스트를 실행해야 합니다.

 

 

 

cd "${0%/*}/.."

프로젝트 루트가 cd에 표시됩니다.

 

 

    phpunit 1> /dev/null
    if [ $? -ne 0 ]; then
      echo -e "\e[1;31m\tUnit tests failed ! Aborting commit.\e[0m" >&2
      exit 1;
    fi

그런 다음 phpunit 명령을 실행하고 명령이 0이 아니면 유닛 테스트가 실패하여 커밋을 중단합니다.

반응형