> 백엔드 개발 > PHP 튜토리얼 > PHP에서 JavaScript 스타일의 테스트 감시자를 작성하는 방법

PHP에서 JavaScript 스타일의 테스트 감시자를 작성하는 방법

Lisa Kudrow
풀어 주다: 2025-02-09 10:58:10
원래의
721명이 탐색했습니다.

How to Write JavaScript-Style Test Watchers in PHP

코어 포인트

JavaScript 스타일 테스트 관찰자를 PHP 프로젝트에 통합하고 파일 변환의 전처리 자동화 및 파일이 변경 될 때 단위 테스트를 재실행하여 개발 효율성을 향상시킵니다.

PHPUNIT와 같은 도구로 자동 테스트를 설정하고 PHPUNIT 시계를 사용하여 파일 수정을 관찰하여 개발 중에 즉각적인 피드백 및 오류 감지를 보장합니다.
    PHP 프로젝트에서 전처리 스크립트를 구현하여 JavaScript Babel과 유사한 구문 변환을 허용하여 호환성을 향상시키고 수동 인코딩 노력을 줄입니다.
  • 테스트 전에 전처리 파일을 자동으로 재건하고 정확한 코드 적용 범위를 유지하고 테스트 프로세스를 단순화하도록 PHP 테스트 환경을 구성합니다.
  • 파일 관찰자를 사용하여 고급 구성을 탐색하여 수정 된 파일 만 선택적으로 재구성하여 대규모 프로젝트에서 많은 파일의 테스트주기를 크게 속도로 높이십시오.
  • 이 기사는 Younes Rafie가 검토했습니다. itepoint 컨텐츠를 최대한 활용 한 모든 Sitepoint Peer Reviewers에게 감사합니다!
  • 처음에는 코드 테스트를 작성하지 않았습니다. 많은 사람들과 마찬가지로 내 "테스트"는 코드를 작성하고 페이지를 새로 고치고 있습니다. "내가 옳은가?" 그것이 옳다고 생각한다면 계속 갈 것입니다.
  • 실제로, 내가 한 대부분의 작업은 다른 형태의 테스트에 대해별로 신경 쓰지 않는 회사입니다. Chris Hartjes와 같은 사람들의 수년간의 경험과 현명한 조언 끝에, 나는 테스트의 가치를 보았습니다. 그리고 나는 여전히 좋은 테스트가 어떻게 생겼는지 배우고 있습니다.
  • 나는 최근에 번들 테스트 관찰자를 포함하는 일부 JavaScript 프로젝트 작업을 시작했습니다.

이것은 테스트 중심의 Nodejs 개발에 대한 훌륭한 고급 비디오 자습서입니다! JavaScript의 세계에서는 사전 프로세스 소스 코드는 드문 일이 아닙니다. JavaScript 세계에서 개발자는 지원되지 않는 구문을 사용하여 코드를 작성한 다음 코드를 널리 지원되는 구문으로 변환하여 종종 Babel이라는 도구를 사용합니다. 호출 전환 스크립트의 부담을 줄이기 위해 BoilerPlate 프로젝트에는 파일 변경을 자동으로 모니터링하는 스크립트가 포함되었습니다.

내가 작업 한 프로젝트는 단위 테스트 재실행과 비슷한 접근 방식을 취했습니다. JavaScript 파일을 변경하면 파일이 변환되고 단위 테스트가 재실행됩니다. 이런 식으로, 나는 무언가가 깨 졌는지 즉시 알 수 있습니다.

이 튜토리얼의 코드는 Github에서 찾을 수 있습니다. PHP 7.1로 테스트했습니다.

프로젝트 설정 이 프로젝트 작업을 시작한 이후 PHPUnit과 비슷한 것을 설정하기 시작했습니다. 실제로 PHPUNIT Observer 스크립트를 설정 한 첫 번째 프로젝트는 파일을 전제하는 PHP 프로젝트입니다.

프로젝트에 전처리 스크립트를 추가 한 후 모든 것이 시작되었습니다.

이 특정 전처리 스크립트를 사용하면 PSR-4의 자동로드 된 클래스 (경로에서/file.php ⇒ Path/to/File.pre)를 제공하는 기능으로 옵트 인으로 바꿀 수 있습니다. 그래서 Composer.json 파일에 다음을 추가했습니다.

composer require pre/short-closures
로그인 후 복사
로그인 후 복사
로그인 후 복사
이것은 composer.json에서 나온 것입니다

그런 다음 현재 사용자 세션의 세부 사항이 포함 된 함수를 생성하기 위해 클래스를 추가했습니다.

"autoload": {
    "psr-4": {
        "App\": "src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\Tests\": "tests"
    }
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
이것은 src/session.pre
에서 나옵니다

이것이 작동하는지 확인하려면 작은 샘플 스크립트를 설정했습니다.

이것은 예제에서 나옵니다

namespace App;

use Closure;

class Session
{
    private $user;

    public function __construct(array $user)
    {
        $this->user = $user;
    }

    public function closureWithUser(Closure $closure)
    {
        return () => {
            $closure($this->user);
        };
    }
}
로그인 후 복사
로그인 후 복사
이것은 loader.php <🎜
에서 나옵니다

이 코드 섹션은 작은 요점을 설명하기에 많은 것입니다. 세션 클래스에는 하나의 폐쇄를 받아들이고 다른 폐쇄를 반환하는 폐쇄 방법이 있습니다. 호출되면이 새 폐쇄는 원래 폐쇄를 호출하여 사용자 세션 배열을 매개 변수로 제공합니다.

이 모든 것을 실행하려면 터미널을 입력하십시오.

<<> 부수적으로,이 사전 처리기는 효과적인 PHP 구문을 생성합니다. 이렇게 보인다 :

require_once __DIR__ . "/vendor/autoload.php";

$session = new App\Session(["id" => 1]);

$closure = ($user) => {
    print "user: " . $user["id"] . PHP_EOL;
};

$closureWithUser = $session->closureWithUser($closure);
$closureWithUser();
로그인 후 복사
로그인 후 복사
<<>… 그리고 <🎜 🎜>

<<> PHP와 프리 파일을 리포지토리에 제출하고 싶지 않을 수도 있습니다. 이를 위해 앱/**/*. php 및 examples.php를 .gitignore에 추가했습니다.

<<>

설정 테스트 <🎜 🎜> 그래서 우리는 이것을 어떻게 테스트합니까? phpunit을 설치하는 것으로 시작하겠습니다 : <🎜 🎜>
require_once __DIR__ . "/vendor/autoload.php";

Pre\Plugin\process(__DIR__ . "/example.pre");
로그인 후 복사
그런 다음 구성 파일을 작성해야합니다

이것은 phpunit.xml <🎜

에서 나온 것입니다
공급 업체/빈/PhPunit을 실행하면 작동합니다. 그러나 우리는 아직 테스트하지 않았습니다. 하나를하자 :

이것은 tests/sessiontest.php <🎜

에서 비롯됩니다

공급 업체/빈/phpunit을 실행할 때 단일 테스트가 통과됩니다. 응!
php loader.php
로그인 후 복사
우리는 무엇을 놓치고 있습니까?

지금까지 모든 것이 잘되었습니다. 우리는이 코드의 작은 코드와 테스트를 썼습니다. 우리는 전처리가 어떻게 작동하는지 걱정할 필요조차 없습니다 (JavaScript 프로젝트보다 한 단계 위로). 코드 커버리지를 확인하려고 할 때 문제가 시작됩니다. 세션을 테스트 한대로 적용 범위 가보고됩니다. 간단한 수업이므로 100% 적용 범위를 달성했습니다. 그러나 우리가 다른 클래스를 추가하면 :

$closure = function ($user) {
   print "user: " . $user["id"] . PHP_EOL;
};
로그인 후 복사

이것은 src/blackbox.pre 에서 나옵니다 보장을 확인하면 어떻게됩니까? 여전히 100%.

이것은 Blackbox.pre를로드하는 테스트가 없기 때문에 발생합니다. 즉, 결코 컴파일되지 않았습니다. 따라서 PHPUnit이 덮어 쓰기 PHP 파일을 찾으면이 전처리 파일을 볼 수 없습니다.
public function closureWithUser(Closure $closure)
{
   return [$closure = $closure ?? null, "fn" => function () use (&$closure) {
       $closure($this->user);
   }]["fn"];
}
로그인 후 복사
테스트하기 전에 모든 파일을 빌드하십시오
테스트를 실행하기 전에 모든 프리 파일을 빌드하기 위해 새 스크립트를 만들어 봅시다 : <🎜 🎜>

이것은 tests/bootstrap.php <🎜

에서 비롯됩니다

여기서는 3 개의 기능을 생성합니다.
composer require pre/short-closures
로그인 후 복사
로그인 후 복사
로그인 후 복사
우리는 phpunit.xml에서 현재 부트 스트랩 파일을 교체해야합니다 : <🎜 🎜>

이것은 phpunit.xml <🎜

에서 나온 것입니다
이제 테스트를 실행할 때 마다이 스크립트는 먼저 모든 프리 파일을 PHP 파일로 정리하고 재구성합니다. 적용 범위가 올바르게보고되며 우리는 행복한 여행을 계속할 수 있습니다…

<...> 이것과는 별도로 ... <🎜 🎜> 코드 기반은 작지만 작을 필요는 없습니다. 우리는 실제 응용 프로그램에서 이것을 시도 할 수 있으며 파일을 테스트 할 때마다 파일을 재건해야한다고 즉시 후회합니다.

이 프로젝트에는 101 개의 사전 파일이 있습니다. 내 (희망적으로) 단위 테스트 스위트를 실행하려면 많은 전처리가 필요합니다. 변경 사항을 모니터링하고 중요한 부품 만 재건하는 방법이 필요합니다. 먼저 파일 옵저버를 설치하겠습니다 : <🎜 🎜>

<'s> 그런 다음 테스트 스크립트를 만들어 봅시다 : <🎜 🎜>

"autoload": {
    "psr-4": {
        "App\": "src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\Tests\": "tests"
    }
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
이것은 스크립트/시계 테스트 <🎜
에서 비롯됩니다

이 스크립트는 Symfony Finder (SRC를 스캔하고 폴더를 테스트하는 데 사용)를 만듭니다. 우리는 임시 변경 파일을 정의했지만 우리가하고있는 일에 엄격하게 필요하지 않습니다. 다음으로 무한 루프를 사용합니다. ResourceWatcher에는 파일이 생성, 수정 또는 삭제되었는지 확인하는 데 사용할 수있는 메소드가 있습니다.

<'s> NEW, 어떤 파일이 변경되었는지 확인하고 재건하자 :

이것은 스크립트/시계 테스트 <🎜

에서 비롯됩니다

이 코드는 BootStrap 파일에서 수행하는 것과 유사하지만 변경된 파일에만 적용됩니다. 파일이 변경되면 테스트를 다시 실행해야합니다.

이것은 스크립트/시계 테스트 <🎜

에서 비롯됩니다

우리는 몇 가지 환경 변수를 도입하고 있습니다. 이러한 변수를 좋아하는 것으로 관리 할 수 ​​있지만 작곡가 스크립트에 추가하는 것이 좋습니다.
namespace App;

use Closure;

class Session
{
    private $user;

    public function __construct(array $user)
    {
        $this->user = $user;
    }

    public function closureWithUser(Closure $closure)
    {
        return () => {
            $closure($this->user);
        };
    }
}
로그인 후 복사
로그인 후 복사

이것은 composer.json에서 나온 것입니다

app_cover는 그렇게 중요하지 않습니다. 스크립트에 코드 커버리지가 포함되어 있는지 관찰자에게만 알 수 있습니다. App_Rebuild는 더 중요한 역할을 수행합니다. 테스트/bootstrap.php 파일이로드 될 때 프리 파일이 재건되는지 여부를 제어합니다. 파일이 요청 된 경우에만 재구성되도록 파일을 수정해야합니다.
require_once __DIR__ . "/vendor/autoload.php";

$session = new App\Session(["id" => 1]);

$closure = ($user) => {
    print "user: " . $user["id"] . PHP_EOL;
};

$closureWithUser = $session->closureWithUser($closure);
$closureWithUser();
로그인 후 복사
로그인 후 복사
이것은 tests/bootstrap.php <🎜

에서 비롯됩니다

또한 부트 스트랩 코드를 포함하기 전에이 환경 변수를 설정하려면 옵저버 스크립트를 수정해야합니다. 전체 관찰자 스크립트는 다음과 같습니다

이것은 스크립트/시계 테스트 <🎜

에서 비롯됩니다 이제 전처리 가능한 파일이 변경 될 때마다 시작하고 테스트를 실행할 수 있어야합니다 ...

<<>

How to Write JavaScript-Style Test Watchers in PHP 기억해야 할 몇 가지 (rawr). 먼저 관찰자 스크립트를 실행하려면 chmod x 스크립트/*가 필요합니다. 둘째, 구성을 설정해야합니다. {process-timeout : 0} (composer.json), 그렇지 않으면 관찰자가 300 초 후에 죽습니다.

보상 라운드!

이 테스트 관찰자는 또한 멋진 부작용을 가능하게했습니다. PHPUnit 테스트에서 전처리/변환을 사용하는 기능. Tests/bootstrap.php : <🎜 🎜>에 일부 코드를 추가하면

이것은 tests/bootstrap.php <🎜

에서 비롯됩니다

이것은 테스트/세션 테스트에서 제공됩니다
composer require pre/short-closures
로그인 후 복사
로그인 후 복사
로그인 후 복사
결론 <🎜 🎜> 나는 그러한 테스트 관찰자를 만들기 전에 너무 많은 전처리 작업을 수행했다고 믿을 수 없습니다. 이것은 우리가 다른 언어와 프레임 워크에서 배울 수있는 것을 증명합니다. JavaScript 프로젝트에 참여하지 않으면 각 테스트가 실행되기 전에 파일을 계속 재건 할 수 있습니다. 메스꺼움!

이 방법이 효과적입니까? 비동기 HTTP 서버 또는 기타 장기 실행 프로세스에 적응할 수 있습니다. 의견에서 당신의 생각을 알려주십시오.

PHP (FAQ)의 JavaScript 스타일 테스트 관찰자의 FAQ PHP에서 JavaScript 스타일 테스트 관찰자를 설정하는 방법은 무엇입니까?
PHP에서 JavaScript 스타일 테스트 관찰자 설정에는 여러 단계가 포함됩니다. 먼저 PHPUNIT 및 PHPUNIT-WATCHER를 설치해야합니다. PHPUnit은 코드 테스트를 작성하는 방법을 제공하는 PHP의 테스트 프레임 워크입니다. PhPunit-Watcher는 코드를 모니터링하고 파일을 저장할 때 PHPUnit 테스트를 실행하는 도구입니다. 이러한 도구를 설치 한 후 PHPUnit-Watcher를 구성하여 코드를 모니터링하고 자동으로 테스트를 실행할 수 있습니다. 이 설정을 사용하면 즉시 코드 변경에 대한 피드백을받을 수 있으므로 오류를 더 빨리 발견하고 수정하는 데 도움이됩니다.

PHP에서 테스트 관찰자를 사용하면 어떤 이점이 있습니까?

PHP에서 테스트 관찰자를 사용하는 데 많은 이점이 있습니다. 코드 변경에 대한 즉각적인 피드백을 제공하여 오류를 더 빨리 발견하고 수정하는 데 도움이됩니다. 또한 모든 코드 변경 후 수동으로 테스트를 실행할 필요가 없기 때문에 시간이 절약됩니다. 또한 코드 테스트를 작성하여 코드의 품질을 향상시키고 유지 관리를보다 쉽게 ​​할 수 있습니다.
"autoload": {
    "psr-4": {
        "App\": "src"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\Tests\": "tests"
    }
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
JavaScript 함수 내에서 PHP 코드를 사용할 수 있습니까?

예, JavaScript 함수 내에서 PHP 코드를 사용할 수 있지만 권장되지 않습니다. PHP는 서버 측 언어이며 JavaScript는 클라이언트 측 언어입니다. 즉, 페이지가 클라이언트로 전송되기 전에 PHP 코드가 서버에서 실행되며 페이지가 수신 된 후 클라이언트에서 JavaScript 코드가 실행됩니다. 따라서 JavaScript 함수 내에서 PHP 코드를 사용하려고하면 JavaScript 기능 전에 PHP 코드가 실행되므로 예상치 못한 결과가 발생할 수 있습니다.

CodeCeption을 사용하여 PHP 코드를 테스트하는 방법은 무엇입니까?

CodeCeption은 단위 테스트, 기능 테스트 및 수락 테스트를 지원하는 PHP의 테스트 프레임 워크입니다. CodeCeption으로 PHP 코드를 테스트하려면 먼저 CodeCeption을 설치하고 프로젝트를 위해 구성해야합니다. 그런 다음 CodeCeption 구문을 사용하여 코드 테스트를 작성하고 CodeCeption의 명령 줄 도구를 사용하여 테스트를 실행할 수 있습니다.

JavaScript에서 PHP 코드를 작성하는 방법은 무엇입니까?

기술적으로 JavaScript로 PHP 코드를 작성할 수 있지만 권장되지 않습니다. PHP는 서버 측 언어이며 JavaScript는 클라이언트 측 언어입니다. 즉, 페이지가 클라이언트로 전송되기 전에 PHP 코드가 서버에서 실행되며 페이지가 수신 된 후 클라이언트에서 JavaScript 코드가 실행됩니다. 따라서 JavaScript에서 PHP 코드를 작성하려고하면 JavaScript 코드 전에 PHP 코드가 실행되므로 예상치 못한 결과로 이어질 수 있습니다. 대신 AJAX를 사용하여 클라이언트에서 서버로 데이터를 보내고 그 반대도 마찬가지입니다.

위 내용은 PHP에서 JavaScript 스타일의 테스트 감시자를 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿