Lawman — это плагин PestPHP для SaloonPHP, который позволяет вам легко писать тесты архитектуры для интеграции API, уделяя особое внимание их простоте написания и легкости чтения. В конце концов, если SaloonPHP делает наши API-интеграции красивыми, то и тесты для них тоже должны быть красивыми, верно?
Lawman значительно упрощает тестирование интеграции SaloonPHP API с точки зрения архитектуры. Позволяет вам сразу увидеть, что на самом деле делает тест. Lawman — это плагин для PestPHP, что означает, что вы можете использовать Lawman Expectations и PestPHP Expectations вместе, просто объединяйте все, что вам нужно для ваших тестов!
Давайте посмотрим, как Lawman может облегчить написание тестов.
Допустим, у нас есть класс Connector, который мы хотим протестировать. С помощью PestPHP мы могли бы сделать следующее:
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toExtend ( ' SaloonHttpConnector ' )
-> toUse ( ' SaloonTraitsPluginsAcceptsJson ' )
-> toUse ( ' SaloonTraitsPluginsAlwaysThrowOnErrors ' );
Таким образом, этот тест гарантирует, что наш класс расширяет базовый соединитель и использует черты AcceptJson
и AlwaysThrowOnErrors
. Хотя этот тест работает, возможно, мы могли бы ускорить его написание и облегчить чтение, поэтому с помощью Lawman вы можете сделать:
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toBeSaloonConnector ()
-> toUseAcceptsJsonTrait ()
-> toUseAlwaysThrowOnErrorsTrait ();
Далее давайте проведем тест Request, который у нас есть:
test ( ' request ' )
-> expect ( ' AppHttpIntegrationsIntegrationRequestsRequest ' )
-> toExtend ( ' SaloonHttpRequest ' )
-> toImplement ( ' SaloonContractsBodyHasBody ' )
-> toUse ( ' SaloonTraitsBodyHasFormBody ' )
-> toUse ( ' SaloonTraitsPluginsAcceptsJson ' );
Лоуман делает этот тест более приятным для чтения:
test ( ' request ' )
-> expect ( ' AppHttpIntegrationsIntegrationRequestsRequest ' )
-> toBeSaloonRequest ()
-> toSendPostRequest ()
-> toHaveFormBody ()
-> toUseAcceptsJsonTrait ();
А что, если мы хотим проверить, есть ли у нашего коннектора метод аутентификации? С Лоуманом это легко сделать, он работает даже с мульти-аутентификацией:
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toBeSaloonConnector ()
-> toUseCertificateAuthentication ()
-> toUseTokenAuthentication ();
У Лоумана также есть ожидания от плагинов нумерации страниц, кэша и ограничения скорости:
test ( ' request ' )
-> expect ( ' AppHttpIntegrationsIntegrationRequestsRequest ' )
-> toBeSaloonRequest ()
-> toSendPostRequest ()
-> toUsePagedPagination ()
-> toHaveCaching ()
-> toHaveRateLimits ()
Возможно, в нашем соединителе есть инструкции повторной попытки, которые мы хотим протестировать. Опять же, с Лоуманом все просто:
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toBeSaloonConnector ()
-> toBeTriedAgainOnFailure ()
-> toHaveRetryInterval ()
-> toUseExponentialBackoff ()
Вклад в пакет более чем приветствуется, поэтому, если вы думаете об ожидании, которое вы хотели бы увидеть, не стесняйтесь отправить запрос на включение или открыть проблему. Если вы отправите запрос на включение, обязательно добавьте новый прибор и проверьте свои ожидания.