gpt4 book ai didi

laravel - 如何使用 phpunit 在 laravel 中模拟 Paypal 交易?

转载 作者:行者123 更新时间:2023-12-03 23:55:33 25 4
gpt4 key购买 nike

测试时:

从我的网站结帐时,需要模拟确认...这样我们就可以继续处理订单。哪里可以做测试。。

我如何将好的代码换成模拟 ?如:

$gateway = Omnipay::create('paypal');
$response = $gateway->purchase($request['params'])->send();
if ($response->isSuccessful()) { ... etc ...

这怎么可能?

虽然我创建了测试,但我在模拟领域的知识是基本的

enter image description here

最佳答案

就它依赖于模拟而言,您不需要知道确切的响应,您只需要知道输入和输出数据,您应该在 laravel 服务提供商中替换您的服务(在这种情况下为 Paypal)。您需要以下步骤:
首先添加一个PaymentProvider给您的 laravel 服务提供商:

class AppServiceProvider extends ServiceProvider
{
...

/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->bind(PaymentProviderInterface::class, function ($app) {
$httpClient = $this->app()->make(Guzzle::class);
return new PaypalPackageYourAreUsing($requiredDataForYourPackage, $httpClient);
});
}

...
}

然后在您的测试类中,您应该用该接口(interface)的模拟版本替换您的提供程序:
class PaypalPackageTest extends TestCase
{
/** @test */
public function it_should_call_to_paypal_endpoint()
{
$requiredData = $this->faker->url;
$httpClient = $this->createMock(Guzzle::class);
$paypalClient = $this->getMockBuilder(PaymentProviderInterface::class)
->setConstructorArgs([$requiredData, $httpClient])
->setMethod(['call'])
->getMock();

$this->instance(PaymentProviderInterface::class, $paypalClient);

$paypalClient->expects($this->once())->method('call')->with($requiredData)
->willReturn($httpClient);

$this->assertInstanceOf($httpClient, $paypalClient->pay());
}
}

关于laravel - 如何使用 phpunit 在 laravel 中模拟 Paypal 交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48916734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com