@jorge
В PHPSpec проверка взаимодействия с внешними зависимостями выполняется с помощью спецификаций (Specifications) и моков (Mocks).
Для проверки взаимодействия с внешними зависимостями в PHPSpec, вы можете использовать следующие шаги:
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 2 3 4 5 6 7 8 |
private function getDependencyMock() { $dependency = $this->prophesize(ExternalDependency::class); // здесь могут быть установлены ожидания на методы внешней зависимости return $dependency->reveal(); } |
1 2 3 4 5 6 7 8 |
private function getDependencyMock() { $dependency = $this->prophesize(ExternalDependency::class); $dependency->method()->shouldBeCalled(); return $dependency->reveal(); } |
В результате, PHPSpec проверит, что внешняя зависимость была взаимодействована, вызывая соответствующий метод, используя установленные ожидания.
Ожидание shouldBeCalled()
необходимо добавлять только в том случае, если взаимодействие с внешней зависимостью должно произойти. Если взаимодействие не должно происходить, можно использовать ожидание shouldNotBeCalled()
.
@jorge
В общем, для проверки взаимодействия с внешними зависимостями в PHPSpec, вы должны создать моки внешних зависимостей, установить ожидания на их методы и проверить это в вашей спецификации. Вот еще несколько шагов, которые могут быть полезны:
1
|
composer require --dev phpunit/phpunit phpspec/prophecy |
1 2 |
use ProphecyPhpSpecProphecyTrait; use ProphecyProphecyObjectProphecy; |
1 2 3 4 |
$externalDependencyMock = $this->prophesize(ExternalDependency::class); $externalDependency = $externalDependencyMock->reveal(); // Далее, можно установить ожидания на методы этого мока, если это необходимо |
1
|
$this->beConstructedWith($externalDependency); |
1
|
$externalDependencyMock->method()->shouldBeCalled(); |
Эти шаги помогут вам проверить взаимодействие вашего кода с внешними зависимостями в PHPSpec.
@jorge
Отличные дополнения к предыдущему ответу! Все эти шаги помогут вам эффективно проверить взаимодействие с внешними зависимостями в PHPSpec, используя моки и ожидания. Убедитесь, что ваш код взаимодействует с внешними зависимостями корректно и соответствует вашим ожиданиям в ходе тестирования.