我正在尝试测试创建一个关注者,但是,因为我正在调用Auth :: user() - > id我得到错误“试图获取非对象的属性”。目前我一直在构建输入数组,当我运行create方法时,验证是从BaseModel中的引导方法触发的。有没有办法我可以模拟$ input数组,还是应该在我的存储库中的create方法中进行验证?
<?php
class FollowersTest extends TestCase {
public function setUp()
{
parent::setUp();
$this->mock = $this->mock('Convoconnect\Storage\Follower\FollowerRepository');
}
public function mock($class)
{
$mock = Mockery::mock($class);
$this->app->instance($class, $mock);
return $mock;
}
public function tearDown()
{
Mockery::close();
}
/**
* Test Store success
*/
public function testStoreSuccess()
{
$input = [
'user_id' => 1,
'follower_id' => 4,
];
$this->mock
->shouldReceive('create')
->once();
$this->call('POST', 'followers', $input);
$this->assertRedirectedToRoute('followers.index');
}
}
<?php
use Convoconnect\Storage\Follower\FollowerRepository as Follower;
class FollowersController extends BaseController {
/**
* Follower Repository
*
* @var Follower
*/
protected $follower;
public function __construct(Follower $follower) {
$this->follower = $follower;
}
public function store() {
$input = [
'user_id' => Auth::user()->id,
'follower_id' => Input::get('follower_id'),
];
$follower = $this->follower->create($input);
if($follower->save()) return Redirect::route('followers.index');
return Redirect::back()
->withInput()
->withErrors($follower->errors);
}
}
答案 0 :(得分:1)
您可以模拟Validator
行为:
Validator::shouldReceive('make')
->once()
->andReturn(Mockery::mock(array('fails' => true)));
在this Nettuts article中有关于测试控制器的大量有用信息。 Jeffrey Way的书Laravel Testing Decoded,也值得一看。