7

ローカルでテストするために app.url 構成値を正しい url ( http://testing.local) に変更しましたが、phpunit テストを実行して call() を実行しようとするとhttp://localhost、app.url の値ではなくクエリを実行しようとします。phpunit が正しいパスを呼び出すにはどうすればよいですか?

実際にURLを呼び出しているのではなく、あたかもそれを処理しているかのように処理していることはわかっていますが、実際に機能させることはできません。/publicの代わりに直接リンクしている testing.local と何か関係があるの/でしょうか?

4

6 に答える 6

9

PHPUnit のテスト URL を変更するには:

/tests/TestCase.phpLaravel プロジェクトに移動します。

次の行を必要な URL に変更します。

// The base URL to use while testing the application.
protected $baseUrl = 'http://newurl.com';

終わり。

于 2016-04-14T12:40:26.937 に答える
9

テストのルート URL を静的に指定する場合は、これを phpunit.xml に追加します。

<env name="APP_URL" value="http://testing.local"/>

代わりに、テスト中に URL を動的に変更したい場合、Laravel 5.4 以降、この$baseUrlメソッドは機能しなくなりました。

また、LaravelがルートURLをキャッシュしているように見えるため、動的にURLを設定しよう\Config:set('app.url', 'http://testing.local')としても機能しません

次の方法でカスタム URL を動的に設定できます。

\URL::forceRootUrl('http://testing.local');
于 2017-04-28T15:24:07.473 に答える
1

Laravel には URL を取得する関数がいくつかあります: (1) url()->current()(2)request()->url()

どちらも同じソースを使用しています。

phpunitの場合、テストは構成からそこにデータを設定しています

config('app.url')

config は.envrecordからデータを取得していますAPP_URL

したがって、いくつかのオプションがあります

1)

ファイルまたはファイルに設定APP_URLする- どちらの場合も、値は単体テストでのみ使用されます。.envphpunit.xml

ただし、すべての単体テストに対して URL は 1 つしかありません。

2)

実行時に設定しますが、関数のAPP_URL前にそれを行う必要がありますsetUp()Tests\TestCase

public function setUp(): void
{
         $_ENV['APP_URL'] = 'example.com';
         parent::setUp();
}

すべての初期化は関数に隠されているため、setUp使用できません config()->set('app.url',...。それ以前parent::setUp();では早すぎ、それ以降では遅すぎます。

ただし、ユニット テスト ファイルごとに 1 つの URL しかありません。

3)

request()->headers->set('HOST', 'example.com');

関数の後のどこにでも設定できsetUp()、上書きさ.envれますconfig()

「しかし」はありません。

于 2020-05-26T23:37:35.590 に答える
-1

私の理解では、Laravel は PHPUnit を実行するときに「testing」環境変数を使用することになっています。しかし、私はあなたと同じ問題を抱えています。それを機能させるために、アプリの URL を手動で設定しました。

$test_url = Config::get('app.url');

これが同じ問題に遭遇した人に役立つことを願っています。

于 2015-03-19T20:31:32.617 に答える