1

現在のプロジェクトで単体テストの実装を開始しました。

現在、すべての単体テストはパスしていますが、便宜上、jsonResponsejson ヘッダーも送信するようにメソッドを変更しました。これは、Chrome コンソールで json レスポンスをツリーとして表示するのに役立ちます。

現在、ユニットテストは次の理由で失敗しています

ヘッダー情報を変更できません - ヘッダーは既に送信されてい
ます (出力は [fullPath]/phpunit/src/Util/Printer.php:134 で開始されます)

@runInSeparateProcessさらに掘り下げてみると、これは docBlocksを追加することで修正できることがわかりました。

しかし、これは次のことにつながります。

PHP 致命的なエラー: クラス 'PHPUnit_Util_Configuration' が見つかりません - 365 行目
PHP スタック トレース:
PHP 1. {main}() -:0

これは私のjsonメソッドの1つです(これは、AJAXリクエストを通じて呼び出されるいくつかのメソッドの最後に呼び出されます):

/**
 * Helper function to print a json encoded success message back to the frontend.
 *
 * @param array $returnData
 *
 * @return bool
 *
 * @runInSeparateProcess
 */
public function returnJsonSuccess($returnData = [])
{
    header('Content-Type: application/json');
    echo json_encode(
        [
            "success" => true,
            "data"    => $returnData,
        ]
    );
    return true;
}

では、本題に入りますが、どうすればこれを適切に機能させることができますか?

私のオプションの 1 つは、メソッドが単体テストから呼び出されたかどうかを検出し、正常に呼び出された場合にのみヘッダーを条件付きで送信することです。最も簡単な方法は、ブートストラップ ファイルで環境変数または定数を定義し、BaseController.

json ヘッダーの送信を維持しながら、単体テストを再び機能させるためのよりクリーンな方法はありますか?

4

2 に答える 2

0

私の観点からは、2 つの解決策が考えられます。

  1. phpunit ブートストラップ ファイルに環境キーを設定し、そのサーバー キーが存在するかどうかを確認します。
  2. setUpメソッドで無効になるクラスの変数を使用する

これが役立つことを願っています

于 2015-10-23T07:50:20.643 に答える