Как проверить взаимодействие с внешними зависимостями в PHPSpec?

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

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

Как проверить взаимодействие с внешними зависимостями в PHPSpec?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от deshaun_cormier , 10 месяцев назад

@jorge 

В PHPSpec проверка взаимодействия с внешними зависимостями выполняется с помощью спецификаций (Specifications) и моков (Mocks).


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

  1. Создайте спецификацию для тестируемого класса или метода. Например:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class MyServiceSpec extends ObjectBehavior
{
    function it_calls_method_on_external_dependency()
    {
        // arrange
        $dependency = $this->getDependencyMock();
        $this->beConstructedWith($dependency);
        
        // act
        $this->performAction();
        
        // assert
        $dependency->method()->shouldBeCalled();
    }
}


  1. В пределах спецификации, создайте мок внешней зависимости для проверки взаимодействия с ней. В этом примере используется метод getDependencyMock(), который создает мок внешней зависимости:
1
2
3
4
5
6
7
8
private function getDependencyMock()
{
    $dependency = $this->prophesize(ExternalDependency::class);
    
    // здесь могут быть установлены ожидания на методы внешней зависимости
    
    return $dependency->reveal();
}


  1. В методе getDependencyMock(), вы можете установить ожидания на методы внешней зависимости, если это необходимо для проверки взаимодействия. Например:
1
2
3
4
5
6
7
8
private function getDependencyMock()
{
    $dependency = $this->prophesize(ExternalDependency::class);
    
    $dependency->method()->shouldBeCalled();
    
    return $dependency->reveal();
}


  1. Запустите тесты используя PHPSpec командой vendor/bin/phpspec run, и PHPSpec проверит взаимодействие с внешней зависимостью, основываясь на определенных ожиданиях.


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


Ожидание shouldBeCalled() необходимо добавлять только в том случае, если взаимодействие с внешней зависимостью должно произойти. Если взаимодействие не должно происходить, можно использовать ожидание shouldNotBeCalled().