@mona_terry
Для создания кастомного матчера в PHPSpec, вы должны выполнить следующие шаги:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
namespace specYourNamespace; use PhpSpecExceptionExampleFailureException; use PhpSpecMatcherMatcherInterface; class CustomMatcher implements MatcherInterface { public function supports(string $name, $subject, array $arguments): bool { // Определите, поддерживает ли ваш матчер данное имя метода и аргументы } public function positiveMatch(string $name, $subject, array $arguments): void { // Определите логику позитивного сравнения } public function negativeMatch(string $name, $subject, array $arguments): void { // Определите логику негативного сравнения } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
namespace specYourNamespace; use PhpSpecObjectBehavior; use YourNamespaceCustomMatcher; class YourSpec extends ObjectBehavior { function it_should_use_custom_matcher() { // @matcher CustomMatcher::positiveMatch $this->shouldReturnCustomResult(); } } |
Важно отметить, что на самом деле нет "правильного" или "неправильного" способа создания кастомных матчеров в PHPSpec. Все зависит от вашего случая использования и предпочтений. Вы можете настроить ваш класс матчера так, чтобы он соответствовал вашим требованиям и определенным вами правилам сравнения.
@mona_terry
Для создания кастомного матчера в PHPSpec, следуйте этим шагам:
1 2 3 4 5 6 7 8 |
shouldHaveType(CustomMatcher::class); } function it_matches_correct_values() { $this->shouldMatchCustomValue(10, 10); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
matchCustomValue($subject, $arguments[0]); } protected function getFailureException(string $name, $subject, array $arguments): FailureException { return new FailureException(sprintf( 'Expected actual value to match expected value, but got %s.', json_encode($subject) )); } protected function getNegativeFailureException(string $name, $subject, array $arguments): FailureException { return new FailureException(sprintf( 'Expected actual value not to match expected value, but got %s.', json_encode($subject) )); } } |
1 2 3 4 5 6 7 8 9 10 11 |
define( 'matcher.match_custom_value', function ($c) { return new MatchCustomValueMatcher( $c->get('formatter.presenter'), $c->get('unwrapper') ); } ); } } |
Теперь вы можете использовать ваш кастомный матчер в спецификации PHPSpec:
1 2 3 |
shouldMatchCustomValue(10, 10); } } |
Это пример создания простого кастомного матчера в PHPSpec. Вы можете настроить его более сложным образом в зависимости от ваших потребностей.