我正在尝试为使用Xero API的网络应用编写一些集成测试。我使用PHP单元和Laravel 5.3框架。每当我运行测试时,虽然我得到500错误,我猜测与私钥/公钥无法找到或可能我的.env
文件中的API密钥未找到。如果我在浏览器中运行应用程序,我会得到预期的结果,没有错误。
我有三个文件(ca-bundle.crt
,privatekey.pem
和publickey.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
非常感谢任何帮助/指示,非常感谢。