laravel assertDatabaseHas()测试方法不起作用

时间:2018-05-19 12:48:41

标签: php unit-testing laravel-5 phpunit

在我的测试中使用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。

任何想法的人?

2 个答案:

答案 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);