Как создать кастомное матчер в PHPSpec?

Пользователь

от mona_terry , в категории: PHP , 8 месяцев назад

Как создать кастомное матчер в PHPSpec?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от willis.streich , 8 месяцев назад

@mona_terry 

Для создания кастомного матчера в PHPSpec, вы должны выполнить следующие шаги:

  1. Создайте новый класс, который будет представлять ваш кастомный матчер. Например, вы можете создать класс с именем CustomMatcher.
 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. В вашем классе спецификации (Spec) импортируйте ваш новый класс матчера и используйте его в комментарии к спецификации:
 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();
    }
}


  1. Запустите ваши тесты PHPSpec. Если ваш матчер поддерживает данный метод и аргументы, он будет вызван во время выполнения теста.


Важно отметить, что на самом деле нет "правильного" или "неправильного" способа создания кастомных матчеров в PHPSpec. Все зависит от вашего случая использования и предпочтений. Вы можете настроить ваш класс матчера так, чтобы он соответствовал вашим требованиям и определенным вами правилам сравнения.

Пользователь

от steve , 8 месяцев назад

@mona_terry 

Для создания кастомного матчера в PHPSpec, следуйте этим шагам:

  1. Создайте новый класс в директории spec вашего проекта. Для примера, давайте назовем его CustomMatcherSpec.php.
1
2
3
4
5
6
7
8
shouldHaveType(CustomMatcher::class);
    }

    function it_matches_correct_values()
    {
        $this->shouldMatchCustomValue(10, 10);
    }
}


  1. Создайте класс, к которому применяется кастомный матчер. Для примера, давайте назовем его CustomMatcher.php.


  1. Создайте кастомный матчер в CustomMatcherSpec.php.
 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. Добавьте метод configure() в CustomMatcherSpec.php, чтобы зарегистрировать ваш кастомный матчер.
 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. Вы можете настроить его более сложным образом в зависимости от ваших потребностей.