2017-11-30 6 views
3

私は自分の検索方法のテストを書いていますが、現在assertSeeを持っていて、より良いテスト結果のためにassertViewHasに変更したいと思います。しかし、私が検索方法から得たデータは、私が期待しているデータと一致したくない。Laravel phpunit assertViewHasが期待されるテストデータと一致しません

私は$userを設定する場所です:

protected $user; 

public function setUp() 
{ 
    parent::setUp(); 

    $this->seed(); 

    $this->user = factory(User::class)->create(['role_id' => 3]); 
} 

私が主張作ってるところです:

$response = $this->followingRedirects()->actingAs($this->user)->get('/manage/users/search?choices=username&search='.$this->user->username.''); 

$response->assertViewIs('manage.users'); 
$response->assertSuccessful(); 
$response->assertViewHas('users', $this->user); 

をそして、これは、それがコントローラから返されたデータである。

$result = User::where('username', 'LIKE', '%'. $request->get('search') .'%') 
       ->orderBy('username', 'asc')->paginate(20); 
return view('manage.users')->with('users', $result); 

一致するデータを取得するにはどうしたらよいですか?

+0

ビューに '$ this-> user'にマッチする' $ users'変数があることをアサートしようとしています。しかし、 '$ users'は' LengthAwarePaginator'のインスタンスです( 'paginate()'を使っているため)。 '$ this-> user'はおそらく' User'モデルのインスタンスです。 – Camilo

+0

あなたはその解決策を知っていますか? – MrAndre

+0

テストで '$ this-> user'をどのように定義していますか?あなたの質問にそれを加えてください。 – Camilo

答えて

1

$this->userがコントローラーの$usersと一致することを確認しようとしています。しかしpaginate()LengthAwarePaginatorインスタンスを返し、$this->userUserのインスタンスなので一致しません。

ビューに渡される変数$usersに特定のユーザーが含まれていることを確認する場合は、必要なロジックを使用してassertViewHas()にクロージャを渡すことができます。

たぶん、このような何か:あなたはLaravel source codeにどのようにassertViewHas()作品を見ることができ

$response->assertViewHas('users', function($users) { 
    return $users->contains($this->user); 
}); 

関連する問題