如何使用Laravel Dusk测试身份验证?

时间:2019-08-16 16:31:09

标签: php laravel phpunit laravel-dusk

我正在使用Laravel Dusk设置e2e测试,但是在尝试弄清楚如何测试Laravel身份验证时遇到了问题。

我正在使用DatabaseMigrations特征迁移数据库,并用1条记录填充数据库(运行模拟用户的setUp方法)。我尝试使用loginAs()方法向该特定用户登录,但是它没有使我登录。

我的AuthenticationTest.php文件

  use DatabaseMigrations;
    public function setUp(): void
    {
        parent::setUp();
        factory('App\User')->create();
    }


    public function an_authenticated_user_will_see_an_account_button()
    {
        $this->browse(function (Browser $browser) {
            $browser
                ->loginAs(User::find(1))
                ->visit('http://recipemanager.test/recipes')
                ->assertSee('Account');
        });
    }

我的dusk routes

|        | GET|HEAD | _dusk/login/{userId}/{guard?} |                  | Laravel\Dusk\Http\Controllers\UserController@login                     | web          |
|        | GET|HEAD | _dusk/logout/{guard?}         |                  | Laravel\Dusk\Http\Controllers\UserController@logout                    | web          |
|        | GET|HEAD | _dusk/user/{guard?}           |                  | Laravel\Dusk\Http\Controllers\UserController@user                      | web          |

请注意,我还没有碰过任何控制器,与Laravel Dusk相关的文件!

我没有在测试中使用测试数据库,但我知道这很糟糕,因此请不要讨厌我。

重现该错误的步骤(您需要XAMPP):
1. Clone the repo
2.切换到分支account
2.配置.env file以匹配您的数据库
3.确保配置vhosts Apache文件和etc/hosts文件,以便您可以将recipemanager.test作为本地路由(127.0.0.1 recipemanager.test)访问
4.运行php artisan dusk

错误: 1)Tests\Browser\AuthenticationTest::an_authenticated_user_will_see_an_account_button Did not see expected text [Account] within element [body]. Failed asserting that false is true.

1 个答案:

答案 0 :(得分:0)

我通过访问食谱<View>解决了该问题。问题出在环境文件中-> APP_URL设置为localhost,而Dusk试图访问localhost:800 / recipes。我通过断言完整的URL来检查

visit('/recipes')

$this->browse(function (Browser $browser) { $browser ->loginAs(User::find(1)) ->visit('/recipes') ->assertUrlIs('http://recipemanager.test/recipes'); }); Error: Actual URL [http://localhost/recipes] does not equal expected URL [http://recipemanager.test/recipes]. 文件

.env

将APP_URL更改为APP_URL=http://localhost 并访问http://recipemanager.test之后,一切正常!