私のクラスには、コメントとまったく同じように機能する非常に基本的な関数があります。このクラスに存在しない場合は、呼び出しを子モデルに転送するだけです。これは私のテストから完全に機能します。
/**
* Handles calling methods on the user model directly from the provider
* Allows e.g. Guardian::User()->findOrFail(1) without having to redeclare
* the methods.
*
* @param $method
* @param $parameters
*
* @return mixed
*/
public function __call($method, $parameters){
$user = $this->createModel();
return call_user_func_array([$user, $method], $parameters);
}
ただし、これの単体テストも書きたいと思います。その場合、私が書いてみたテストは次のとおりです。
public function testProviderAsksModelToFind(){
$factoryUser = Factory::attributesFor('User', ['id' => 1]);
$p = m::mock('Webfox\Guardian\User\Guardian\Provider[createModel]',['']);
$user = m::mock('Webfox\Guardian\User\Guardian\User[find]');
$p->shouldReceive('createModel')->once()->andReturn($user);
$user->shouldReceive('find')->with(1)->once()->andReturn($factoryUser);
$this->assertSame($factoryUser, $p->find(1));
}
ただし、これは以下の素敵なエラーを吐き出しています:
1) EloquentUserProviderTest::testProviderAsksModelToFind BadMethodCallException: メソッド Webfox\Guardian\User\Guardian\Provider::find() がこのモック オブジェクトに存在しません
では、これを修正してテストに合格するにはどうすればよいでしょうか?