laravelコンポーネントを使用してルーメン5.2でphpunitテストを作成する際に問題が発生しました。1 つのテスト内で API に対して複数の http 呼び出しを行うと、後続の呼び出しに提供する本文は無視され、テスト内のすべての http 呼び出しに提供される最初の本文が優先されます。この問題は、post()、put()、call() など、MakesHttpRequests で使用可能なメソッドのいずれかを使用して発生します。問題は類似していますが、ここおよびここで説明されている問題と同じではありませんが、それらの解決策は適用できないか、問題を解決しません。次の動作に絞り込みました。
EchoTest.php
<?php
class EchoTest extends TestCase
{
public function testEcho()
{
$this->json('POST', '/echo', ['string' => "first"]);
$this->json('POST', '/echo', ['string' => "second"]);
$this->json('POST', '/echo', ['string' => "third"]);
}
}
EchoController.php
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Input;
class EchoController extends Controller
{
public function _echo()
{
$input = Input::json()->all();
var_dump($input['string']);
}
}
ルート.php
<?php
$app->post('echo', ['uses' => 'EchoController@_echo']);
出力
.string(5) "first"
string(5) "first"
string(5) "first"
$this->refreshApplication()
各 post 呼び出しの後に呼び出しを行うと多少は効果がありますが、DatabaseTransactions ロジックが壊れて、データベースにテスト データが散らばり、後続のテスト実行が汚染され、問題が修正されないなどの副作用が発生することがわかりました。更新前の最後の投稿。
私はここで間違っていることにかなり困惑しています。下にあるすべてのコンテナマジックでそれを失い、そこに明らかなバグが見つからなくなるまで、リクエスト処理をいくつかのレイヤーで追跡しました。