我的课程中有一个非常基本的功能,就像评论所说的那样,如果在这个课程中不存在,它只会转发对子模型的调用。 这完全符合我的测试。
/**
* 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()在此不存在 模拟对象
那么,我该如何解决这个问题呢?
答案 0 :(得分:0)
有趣的是,在Provider Mock类上调用方法find。该错误声称。不应该是:
$this->assertSame($factoryUser, $user->find(1));