使用Laravel,phpunit和Homestead进行身份验证测试失败

时间:2019-04-20 22:51:35

标签: authentication laravel-5 phpunit homestead

因此,我正在尝试在Homestead上运行的Laravel 5.8项目中测试注册和登录功能。

我的问题是我无法获得测试(登录和注册)以通过assertAuthenticated()和assertAuthenticatedAs()函数。

我使用php artisan make:auth创建了登录功能,并没有做太多改变,只是创建了一个“用户名”字段来代替电子邮件使用。

当我测试assertStatus()$this->get(url)之类的东西时,一切正常,但是例如当我添加行$this->assertAuthenticatedAs($user)时,测试崩溃。

这是我实际的传递函数:

    public function test_login_valid_user()
    {
        $user = factory(User::class)->create();

        $response = $this->post('/login', [
            'username' => $user->username,
            'password' => 'secret'
        ]);

        $response->assertStatus(302);

    }

如果在行末添加$this->assertAuthenticatedAs($user)行,则会出现以下错误:

There was 1 failure:

1) Tests\Feature\Auth\LoginTest::test_login_valid_user
The current user is not authenticated.
Failed asserting that null is not null.

/home/vagrant/code/my_project/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithAuthentication.php:89
/home/vagrant/code/my_project/tests/Feature/Auth/LoginTest.php:39

在注册用户后,当我尝试检查$this->assertAuthenticated()时,在注册测试中也发生了同样的错误。

因此,我想到了与Vagrant / Homestead有关的会话问题,但我才开始使用它们,但找不到任何提示。而且我对PHPUnit和测试来说还是一个新手,我才刚刚开始了解它的工作原理。

2 个答案:

答案 0 :(得分:3)

问题与缓存有关。

必须首先读取文件phpunit.xml,因为您需要:<server name="APP_ENV" value="testing"/>

在测试之前使用命令

 php artisan config:clear

之后,您的dump(config('app.env'));将是testing(而不是local)。

然后一切正常。

答案 1 :(得分:1)

我一直遇到同样的问题。对于单元测试,仅当您在APP_ENV = testing下运行时,才应禁用CSRF令牌验证。尽管phpunit.xml覆盖了我的“本地”配置,所以将其设置为“测试”。并非如此,因为PhpStorm没有读取该文件。

如果您使用的是PHPStorm,请不要忘记检查默认配置文件phpunit.xml的路径。 (设置->语言和框架-> PHP->测试框架)