情况很简单,用户可以编辑自己的个人资料。通过浏览器测试运行它,就像一个魅力。做一个测试...好了,现在我们有了一些有趣的东西。我将其发布在Laracasts网站上,但我认为更多的曝光率总是好的。
/** @test */
function auth_user_can_edit_own_profile()
{
$user = factory('App\User')->create();
$user->setProfile(); //this just makes an empty profile so a 1-1 relation exists
$this->actingAs($user);
$response = $this->post('profile/'.$user->id.'/update',[
'quote'=>'Hello World',
]);
$response->assertSee('Hello World');
}
我失败了。屏幕上显示的是重定向到主页。 O.o我的代码中什么也做不成。
我相信这与我的表单请求的authorize()方法有关。但是,我看不到如何。我尝试在测试中使用$ this-> withoutExceptionHandling()而不进行任何更改。
storeProfile form request:
public function authorize()
{
$profile = $this->route('profile');
if ($this->user()->can('edit profile') || $this->user()->id == $profile->user_id)
{
return true;
}
return false;
}
Profile Controller update:
public function update(storeProfile $request, Profile $profile)
{
$profile->update($request->except('name'));
$profile->save();
if($profile->user->name != $request->input('name'))
{
$profile->user()->update(['name' => $request->input('name')]);
//TODO event to track name changes
}
return redirect()->action('ProfileController@show',['id' => $profile->user_id]);
}
任何对此的见解都会很有帮助,但是我真的不明白发生了什么。谢谢大家花时间阅读和帮助!
我尝试过的事情: