MrA*_*dre 5 php phpunit laravel
我正在为我的搜索方法编写测试,但目前有一个 assertSee 并希望将其更改为 assertViewHas 以获得更好的测试结果。但是我从搜索方法中得到的数据并不想与我期望的数据相匹配。
这是我设置的地方$user:
protected $user;
public function setUp()
{
parent::setUp();
$this->seed();
$this->user = factory(User::class)->create(['role_id' => 3]);
}
Run Code Online (Sandbox Code Playgroud)
这就是我要断言的地方:
$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);
Run Code Online (Sandbox Code Playgroud)
这是它将从控制器返回的数据:
$result = User::where('username', 'LIKE', '%'. $request->get('search') .'%')
->orderBy('username', 'asc')->paginate(20);
return view('manage.users')->with('users', $result);
Run Code Online (Sandbox Code Playgroud)
我在获取匹配数据时做错了什么?
您正在尝试从控制器断言$this->user匹配$users。但是paginate()返回一个LengthAwarePaginator实例并且$this->user是 的实例User,所以它们不会匹配。
如果你想断言给定的用户包含在$users传递给视图的变量中,你可以assertViewHas()使用必要的逻辑传递一个闭包。
也许是这样的:
$response->assertViewHas('users', function($users) {
return $users->contains($this->user);
});
Run Code Online (Sandbox Code Playgroud)
您可以查看Laravel 源代码的assertViewHas()工作原理。
| 归档时间: |
|
| 查看次数: |
3655 次 |
| 最近记录: |