Uma biblioteca que permite usar facilmente a biblioteca PHP-VCR em seus testes PHPUnit.
composer require --dev angelov/phpunit-php-vcr
Em seguida, adicione a extensão ao arquivo de configuração do PHPUnit.
(Todos os parâmetros são opcionais.)
< extensions >
< bootstrap class = " AngelovPHPUnitPHPVcrExtension " >
< parameter name = " cassettesPath " value = " tests/fixtures " />
< parameter name = " storage " value = " yaml " /> <!-- https://php-vcr.github.io/documentation/configuration/#storage -->
< parameter name = " libraryHooks " value = " stream_wrapper, curl, soap " /> <!-- https://php-vcr.github.io/documentation/configuration/#library-hooks -->
< parameter name = " requestMatchers " value = " method, url, query_string, ... " /> <!-- https://php-vcr.github.io/documentation/configuration/#request-matching -->
< parameter name = " whitelistedPaths " value = " " /> <!-- https://php-vcr.github.io/documentation/configuration/#white--and-blacklisting-paths -->
< parameter name = " blacklistedPaths " value = " " /> <!-- https://php-vcr.github.io/documentation/configuration/#white--and-blacklisting-paths -->
< parameter name = " mode " value = " new_episodes " /> <!-- https://php-vcr.github.io/documentation/configuration/#record-modes -->
</ bootstrap >
</ extensions >
A biblioteca fornece um atributo UseCassette
que pode ser declarado em classes de teste ou métodos de teste específicos. O atributo espera um argumento de string – o nome do cassete.
Ao executar os testes, a biblioteca ligará e desligará automaticamente o gravador e inserirá os cassetes quando necessário.
Exemplos:
Quando declarado em uma classe, o PHP-VCR interceptará as solicitações em todos os métodos de teste daquela classe e armazenará as respostas no cassete fornecido.
use Angelov PHPUnitPHPVcr UseCassette ;
use PHPUnit Framework Attributes Test ;
use PHPUnit Framework TestCase ;
#[UseCassette( " example_cassette.yml " )]
class ExampleTest extends TestCase
{
#[Test]
public function example (): void { . . . }
#[Test]
public function another (): void { . . . }
}
Quando declarado em um método de teste, apenas as solicitações desse método serão interceptadas e armazenadas no cassete fornecido. Observe que ele pode ser declarado em vários métodos de teste com cassetes diferentes.
use Angelov PHPUnitPHPVcr UseCassette ;
use PHPUnit Framework Attributes Test ;
use PHPUnit Framework TestCase ;
class ExampleTest extends TestCase
{
#[Test]
#[UseCassette( " example.yml " )]
public function example (): void { . . . }
#[Test]
public function another (): void { . . . }
#[Test]
#[UseCassette( " example_2.yml " )]
public function recorded (): void { . . . }
}
Quando declarado tanto na classe quanto em um método específico, o nome do atributo declarado no método será utilizado para esse método. Neste exemplo, as respostas das solicitações feitas no método example()
serão armazenadas em example.yml
e as de recorded()
em example_2.yml
.
use Angelov PHPUnitPHPVcr UseCassette ;
use PHPUnit Framework Attributes Test ;
use PHPUnit Framework TestCase ;
#[UseCassette( " example.yml " )]
class ExampleTest extends TestCase
{
#[Test]
public function example (): void { . . . }
#[Test]
#[UseCassette( " example_2.yml " )]
public function recorded (): void { . . . }
}