在我的测试中使用laravel的assertDatabaseHas()方法时,我一直收到以下错误。
gettext("
这是我使用assertDatabaseHas()的代码片段:
Error: Call to undefined method Illuminate\Http\Response::assertDatabaseHas()
我还尝试使用$ this-> assertDatabaseHas(),但出现了一个新错误:
$response = $this->withSession(['user_id' => $this->user_id])
->json('post',
route('some_route'),
$request //an array
);
$request['myuser_id'] = $this->user_id;
$response->assertStatus($expected['code'])
->assertDatabaseHas('profiles',$request);
我搜索了问题解决方案一段时间后找到了这个:solution,但将phpunit版本降级为5. *对我没用。
我使用的是laravel 5.4和phpunit 6.5.5。
任何想法的人?
答案 0 :(得分:0)
我将laravel版本从5.4.37升级到5.5.40并解决了问题。 assertDatabaseHas()现在工作正常。
答案 1 :(得分:0)
assertDatabaseHas()
始终有效,您只是错误地使用了它,而Laravel版本的更改将无法解决您的问题。
您在这里处理的是两个单独的实体-HTTP响应和数据库条目-因此需要将它们视为相同。从json()
或assertStatus()
之类的方法返回的是Illuminate\Http\Response
的实例,并且没有数据库方法。
将这些内容分开存放:发出HTTP请求并检查响应,然后检查数据库。
$this
->withSession(['user_id' => $this->user_id])
->json('post', route('some_route'), $request)
->assertStatus($expected['code']);
$request['myuser_id'] = $this->user_id;
$this->assertDatabaseHas('profiles', $request);