私は、ランダムな文字列ジェネレータインターフェイスがメソッドの1つに注入されるLaravelコントローラを作成しています。次にAppServiceProviderで実装を登録しています。これは正常に動作します。Laravelでは、テスト時にサービスコンテナに別の実装を与える方法はありますか?
コントローラーは、ランダムストリングを入力として使用してデータをデータベースに保管します。私は、実際の乱数発生器を使用する際に「ABC123」はどうなるかわからないので
$this->post('/api/v1/do_things', ['email' => $this->email])
->seeInDatabase('things', ['email' => $this->email, 'random' => 'abc123']);
:それはランダムなので、私はそうのような(MakesHttpRequests
を使用して)それをテストすることはできません。そこで、私はそれに対して主張できるように、常に 'abc123'を返すランダムインターフェイスの別の実装を作成しました。
質問:テスト時にこの偽の発電機にバインドするにはどうすればよいですか?は私が右のテストの前に
$this->app->bind('Random', 'TestableRandom');
を実行しようとしましたが、それはまだ私がAppServiceProviderに登録し、実際の発電機を使用しています。何か案は?私はそのようなことをどうやってテストするかについて完全に間違っていますか?
ありがとうございます!
今の条件付き結合のアプローチと一緒に行きました。ありがとう! –