PHPSpec: фиктивный статический метод
Я тестирую класс с PHPSpec, который идет нормально, пока я не хотел создать макет для класса, который имеет статические функции.
Класс, который я тестирую:
<?php
namespace App\Service;
class PaymentService
{
public function paymentVerification($orderId, array $data)
{
...
// Get the payment details
$payment = \PayPal\Api\Payment::get($data['payKey'], $apiContext);
...
}
}
Класс PHPSpec:
<?php
namespace App\Spec\Service;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
class PaymentServiceSpec extends ObjectBehavior
{
/**
* @param \PayPal\API\Payment $payment
*/
function it_should_return_false_when_the_payment_verification_failed($payment)
{
...
// This throws a PHP Fatal error: Call to undefined method PhpSpec\Wrapper\Collaborator::get() in
$payment::get(Argument::exact($data['payKey']), Argument::exact($apiContext))->shouldReturn(array('foobar'));
...
$this->paymentVerification($orderId, $data)->shouldReturn(false);
}
}
Как я могу издеваться над \PayPal\Api\Payment::get($data['payKey'], $apiContext);? В настоящее время это приводит к фатальной ошибке PHP: вызов неопределенного метода PhpSpec\Wrapper\Collaborator::get()
Как это можно сделать правильно? Заранее спасибо!
1 ответ
Решение
Вы должны избегать этого. Создайте тонкий слой, который обернет библиотеку PayPal. Дразнить свои собственные вещи.