6

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 ロジックが壊れて、データベースにテスト データが散らばり、後続のテスト実行が汚染され、問題が修正されないなどの副作用が発生することがわかりました。更新前の最後の投稿。

私はここで間違っていることにかなり困惑しています。下にあるすべてのコンテナマジックでそれを失い、そこに明らかなバグが見つからなくなるまで、リクエスト処理をいくつかのレイヤーで追跡しました。

4

1 に答える 1