をやったときにこれは私がやっている何How to wait for a page reload in Laravel integration testing私が認証をリロードしなければならないのはなぜ::ユーザー()統合テスト
のフォローアップでは、ユーザーのプロファイルを編集して、ビューを再表示することです。
マイプロフィールアクション:(UserControllerで)ビューは、私のテスト中に、今
{{ Auth::user()->firstname }}
のようなコードが含まれています
public function profile(){
return view('user/profile');
}
、古い(変更なし)ユーザデータが表示されます。
テスト:
protected function editUserProfile()
{
$this->visit('/user/profile');
$firstName = $this->faker->firstname;
$lastname = $this->faker->lastname;
$this->within('#userEditForm', function() use ($firstName, $lastname) {
$this->type($firstName, 'firstname');
$this->type($lastname, 'surname');
$this->press('Save')
->seePageIs('/user/profile')
->see($firstName) # here the test fails
->see($lastname);
});
}
私はこのようなUserControllerでの変更:
public function profile(){
Auth::setUser(Auth::user()->fresh());
return view('user/profile');
}
すべてが正常に動作します。
今、私は理解したい、なぜそれがこのようなものか理解したい。
この場合、統合テストはブラウザと異なる動作をするのはなぜですか?その動作を調整するためのよりよい方法があるので、「本当の問題」がある場合にのみテストが失敗します。それとも私のコードは悪いですか?
失敗テストの出力は何ですか? '#userEditForm'はどこに提出されますか、それはajaxですか?そうであれば、Laravelの基本テストスイートでajaxを使うことはできないと思うので、セレンを使う必要があります。このパッケージを見てください:https://github.com/Modelizer/Selenium – haakym
これはAJAXではありません。ユーザー名をAliceからJohnに変更したときの出力は、「Johnが見えると思った」のようなものです。それで古いデータを取っています。私がAuth :: user()をリロードすると、すべて正常に動作します – Alex
なぜあなたは使用しません: '$ this-> type($ firstName、 'firstname') - > type($ lastname、 'surname') - > see($ lastname); '($ lastname);を参照してください。ここで、テストは失敗します。 – user3482682