이것은 테스트 중심의 Nodejs 개발에 대한 훌륭한 고급 비디오 자습서입니다!
이 튜토리얼의 코드는 Github에서 찾을 수 있습니다. PHP 7.1로 테스트했습니다.
프로젝트 설정
이 특정 전처리 스크립트를 사용하면 PSR-4의 자동로드 된 클래스 (경로에서/file.php ⇒ Path/to/File.pre)를 제공하는 기능으로 옵트 인으로 바꿀 수 있습니다. 그래서 Composer.json 파일에 다음을 추가했습니다.
<code class="language-bash">composer require pre/short-closures</code>
그런 다음 현재 사용자 세션의 세부 사항이 포함 된 함수를 생성하기 위해 클래스를 추가했습니다.
<code class="language-json">"autoload": { "psr-4": { "App\": "src" } }, "autoload-dev": { "psr-4": { "App\Tests\": "tests" } }</code>
에서 나옵니다
이것이 작동하는지 확인하려면 작은 샘플 스크립트를 설정했습니다.
부수적으로,이 사전 처리기는 효과적인 PHP 구문을 생성합니다. 이렇게 보인다 :
<code class="language-php">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);
};
}
}</code>
이 코드 섹션은 작은 요점을 설명하기에 많은 것입니다. 세션 클래스에는 하나의 폐쇄를 받아들이고 다른 폐쇄를 반환하는 폐쇄 방법이 있습니다. 호출되면이 새 폐쇄는 원래 폐쇄를 호출하여 사용자 세션 배열을 매개 변수로 제공합니다.
<code class="language-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();</code>
… 그리고
PHP와 프리 파일을 리포지토리에 제출하고 싶지 않을 수도 있습니다. 이를 위해 앱/**/*. php 및 examples.php를 .gitignore에 추가했습니다. <code class="language-php">require_once __DIR__ . "/vendor/autoload.php";
Pre\Plugin\process(__DIR__ . "/example.pre");</code>
<code class="language-bash">php loader.php</code>
<code class="language-php">$closure = function ($user) { print "user: " . $user["id"] . PHP_EOL; };</code>
이것은 src/blackbox.pre 에서 나옵니다
<code class="language-php">public function closureWithUser(Closure $closure) { return [$closure = $closure ?? null, "fn" => function () use (&$closure) { $closure($this->user); }]["fn"]; }</code>
<code class="language-bash">composer require pre/short-closures</code>
이것은 phpunit.xml 에서 나온 것입니다
<...> 이것과는 별도로 ...
그런 다음 테스트 스크립트를 만들어 봅시다 :
<code class="language-json">"autoload": { "psr-4": { "App\": "src" } }, "autoload-dev": { "psr-4": { "App\Tests\": "tests" } }</code>
이 스크립트는 Symfony Finder (SRC를 스캔하고 폴더를 테스트하는 데 사용)를 만듭니다. 우리는 임시 변경 파일을 정의했지만 우리가하고있는 일에 엄격하게 필요하지 않습니다. 다음으로 무한 루프를 사용합니다. ResourceWatcher에는 파일이 생성, 수정 또는 삭제되었는지 확인하는 데 사용할 수있는 메소드가 있습니다.
NEW, 어떤 파일이 변경되었는지 확인하고 재건하자 :
<code class="language-php">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); }; } }</code>
<code class="language-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();</code>
이것은 tests/bootstrap.php 에서 비롯됩니다 또한 부트 스트랩 코드를 포함하기 전에이 환경 변수를 설정하려면 옵저버 스크립트를 수정해야합니다. 전체 관찰자 스크립트는 다음과 같습니다
이 테스트 관찰자는 또한 멋진 부작용을 가능하게했습니다. PHPUnit 테스트에서 전처리/변환을 사용하는 기능. Tests/bootstrap.php : 에 일부 코드를 추가하면
보상 라운드!
<code class="language-bash">composer require pre/short-closures</code>
결론 나는 그러한 테스트 관찰자를 만들기 전에 너무 많은 전처리 작업을 수행했다고 믿을 수 없습니다. 이것은 우리가 다른 언어와 프레임 워크에서 배울 수있는 것을 증명합니다. JavaScript 프로젝트에 참여하지 않으면 각 테스트가 실행되기 전에 파일을 계속 재건 할 수 있습니다. 메스꺼움!PHP (FAQ)의 JavaScript 스타일 테스트 관찰자의 FAQ
이 방법이 효과적입니까? 비동기 HTTP 서버 또는 기타 장기 실행 프로세스에 적응할 수 있습니다. 의견에서 당신의 생각을 알려주십시오. PHP에서 JavaScript 스타일 테스트 관찰자를 설정하는 방법은 무엇입니까?
<code class="language-json">"autoload": { "psr-4": { "App\": "src" } }, "autoload-dev": { "psr-4": { "App\Tests\": "tests" } }</code>
위 내용은 PHP에서 JavaScript 스타일의 테스트 감시자를 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!