Lawman é um plug-in PestPHP para SaloonPHP que permite que você escreva facilmente testes de arquitetura para suas integrações de API com foco em que sejam fáceis de escrever e ler. Afinal, se o SaloonPHP deixa nossas integrações de API lindas, os testes para elas também deveriam ser lindos, certo?
Lawman torna o teste de suas integrações da API SaloonPHP, do ponto de vista da arquitetura, muito mais fácil de fazer. Permitindo que você veja rapidamente o que um teste está realmente fazendo. Lawman é um plugin para PestPHP, o que significa que você pode usar Lawman Expectations e PestPHP Expectations juntos, apenas encadeie o que precisar para seus testes!
Vamos dar uma olhada em como Lawman pode ajudar a facilitar a redação de testes.
Digamos que temos uma classe Connector que queremos testar, com o PestPHP poderíamos fazer o seguinte:
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toExtend ( ' SaloonHttpConnector ' )
-> toUse ( ' SaloonTraitsPluginsAcceptsJson ' )
-> toUse ( ' SaloonTraitsPluginsAlwaysThrowOnErrors ' );
Portanto, esse teste garante que nossa classe estenda o Conector base e use as características AcceptJson
e AlwaysThrowOnErrors
. Embora esse teste funcione, talvez pudéssemos torná-lo mais rápido de escrever e mais fácil de ler, então com Lawman você pode fazer:
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toBeSaloonConnector ()
-> toUseAcceptsJsonTrait ()
-> toUseAlwaysThrowOnErrorsTrait ();
A seguir, vamos fazer um teste de solicitação que temos:
test ( ' request ' )
-> expect ( ' AppHttpIntegrationsIntegrationRequestsRequest ' )
-> toExtend ( ' SaloonHttpRequest ' )
-> toImplement ( ' SaloonContractsBodyHasBody ' )
-> toUse ( ' SaloonTraitsBodyHasFormBody ' )
-> toUse ( ' SaloonTraitsPluginsAcceptsJson ' );
Lawman torna este teste muito mais agradável de ler:
test ( ' request ' )
-> expect ( ' AppHttpIntegrationsIntegrationRequestsRequest ' )
-> toBeSaloonRequest ()
-> toSendPostRequest ()
-> toHaveFormBody ()
-> toUseAcceptsJsonTrait ();
E se quisermos testar se nosso conector possui um método de autenticação? Lawman torna isso fácil de fazer, e até funciona com autenticação múltipla:
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toBeSaloonConnector ()
-> toUseCertificateAuthentication ()
-> toUseTokenAuthentication ();
Lawman também tem expectativas para os plug-ins de paginação, cache e limite de taxa:
test ( ' request ' )
-> expect ( ' AppHttpIntegrationsIntegrationRequestsRequest ' )
-> toBeSaloonRequest ()
-> toSendPostRequest ()
-> toUsePagedPagination ()
-> toHaveCaching ()
-> toHaveRateLimits ()
Talvez nosso conector tenha algumas instruções de nova tentativa que desejamos testar. Novamente, com Lawman, é tão simples quanto:
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toBeSaloonConnector ()
-> toBeTriedAgainOnFailure ()
-> toHaveRetryInterval ()
-> toUseExponentialBackoff ()
Contribuições para o pacote são mais que bem-vindas, então se você pensar em uma expectativa que gostaria de ver, sinta-se à vontade para enviar uma solicitação pull ou abrir um problema. Se você enviar uma solicitação pull, certifique-se de adicionar um novo Fixture e testar suas expectativas.