使用私有/公共密钥与PHPunit进行外部API集成测试

时间:2016-10-17 08:33:58

标签: php api laravel phpunit laravel-5.3

我正在尝试为使用Xero API的网络应用编写一些集成测试。我使用PHP单元和Laravel 5.3框架。每当我运行测试时,虽然我得到500错误,我猜测与私钥/公钥无法找到或可能我的.env文件中的API密钥未找到。如果我在浏览器中运行应用程序,我会得到预期的结果,没有错误。

我有三个文件(ca-bundle.crtprivatekey.pempublickey.cer),它们位于certs/Xero目录中,还有两个API密钥位于{{1} { 1}}文件。所有这些都是API调用所必需的。

我的测试文件包含以下代码:

.env

API端点调用<?php use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseTransactions; class XeroGatewayTest extends TestCase { use DatabaseTransactions; /** @test */ public function it_returns_a_list_of_invoices_for_a_customer() { $customer = factory(App\Customer::class)->create(); $this->get('/api/changes/invoices/'.$customer->id); $this->assertResponseOk(); $this->seeJson(); } } 中的方法来检索该客户的发票详细信息。

我有一个位于InvoiceController目录中的Xero配置文件(xero.php),其中包含以下内容:

config

配置文件在其构造函数中传递给自定义<?php return [ 'xero' => [ 'core_version' => '2.0', 'payroll_version' => '1.0', 'file_version' => '1.0', ], 'oauth' => [ 'callback' => 'oob', 'consumer_key' => env('XERO_KEY'), 'consumer_secret' => env('XERO_SECRET'), 'rsa_private_key' => file_get_contents(__DIR__.'/../certs/Xero/privatekey.pem'), 'rsa_public_key' => file_get_contents(__DIR__.'/../certs/Xero/publickey.cer'), ], 'curl' => [ CURLOPT_USERAGENT => 'The Builder', CURLOPT_CAINFO => '../certs/Xero/ca-bundle.crt', ] ]; 类。然后该类用于进行API调用。

现在,当我在浏览器中运行应用程序时,我得到了我想要的结果(带有客户发票详细信息的json对象)。但是当我在终端上运行测试时,我得到了:

XeroServiceProvider

我还更新了我的1) XeroGatewayTest::it_returns_a_list_of_invoices_for_a_customer Expected status code 200, got 500. Failed asserting that false is true. /home/ubuntu/workspace/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:663 /home/ubuntu/workspace/tests/integration/invoicing/XeroGatewayTest.php:18 FAILURES! Tests: 1, Assertions: 1, Failures: 1. 文件,其中包含以下内容:

composer.json

非常感谢任何帮助/指示,非常感谢。

0 个答案:

没有答案