私はデータベース呼び出しを行うクラスmyModel
があります。そのように私はこれをスタブしたいので、実際にはこれらの高価な呼び出しのいずれかをしません。模擬を使用して同じクラスのインスタンスを模擬してスタブする
public function myFunction($limit)
{
$this->doThing();
}
private function doThing()
{
$result = $this->myModel
->select('thing')
->groupBy('name')
->orderBy('count', 'desc')
->get;
// do stuff with $result
}
だから私はテストで定義$stuff
のコレクションとして$result
を出力し、完璧に動作し、私は
/** @test */
public function my_test()
{
$stuff = new Collection(['person1', 'person2', 'person3',]);
$myModelMock = m::mock(MyModel::class, [
'select->groupBy->orderBy->get' => $stuff
]);
App::instance(MyModel::class, $myModelMock);
$myOtherClass = App::make(OtherClassWhereMyModelIsInjectedAutomagically::class);
$myOtherClass->myFunction();
}
を使用する電話をかけるモデルのメソッドをスタブに。
ただし、流暢なインターフェイス機能がであることを確認したい場合は、一度だけと呼びます。私は、これらの関数がプライベートメソッドの中で呼び出されていることを理解していますが、プライベート関数自体をテストしていないので、それは重要ではありません。それはもはや私のテストで$stuff
データに置き換えられていることを意味しない - 私は試してみて
/** @test */
public function query_ran_once()
{
$stuff = new Collection(['person1', 'person2', 'person3',]);
$myModelMock = m::mock(MyModel::class, [
'select->groupBy->orderBy->get' => $stuff,
'where->update' => null,
'whereIn->update' => null
]);
$myModelMock
->shouldReceive('select->groupBy->orderBy->get')
->times(1)
App::instance(MyModel::class, $myModelMock);
$myOtherClass = App::make(OtherClassWhereMyModelIsInjectedAutomagically::class);
$myOtherClass->myFunction();
}
を使用する場合
は、だから私は$result
がnull
あるとされて終わるエラーが発生します。
モック期待が実行される前にスタブデータをどのように使用できますか?
ありがとうございます。だから私は問題は、 '$ myModelMock'から返されるクラスは、デフォルトでコレクションではなく擬似オブジェクトのインスタンスであると仮定します。 – myol
いいえ...問題は、空の値を返していたことでした –
私は再度感謝を参照してください。 – myol