【问题标题】:Dusk user auth session is shared across test methods in a Test Class in Laravel 5.6Dusk 用户身份验证会话在 Laravel 5.6 的测试类中的测试方法之间共享
【发布时间】:2018-07-12 17:31:42
【问题描述】:

所以我在一个测试类中有多个方法。

在创建工厂用户的第一种方法中,登录填写登录凭据和 assertPathis('/home')。此方法运行没有任何问题。

public function test_user_should_see_home()
    {

        $user = factory(User::class)->create([
            'name' => 'first',
            'email' => 'abc@gmail.com',

        ]);


        $this->browse(function ($browser) use($user){
            $browser->visit('/login')
                    ->type('email', $user->email)
                    ->type('password', 'secret')
                    ->press('Login')
                    ->assertPathIs('/home');
        });

    }

在第二种方法中,再次创建工厂用户进入登录并填写凭据并做出一些断言。

public function test_user_should_see_login()
    {

        $user = factory(User::class)->create([
            'name' => 'second',
            'email' => 'abcd@gmail.com',
        ]);

        $this->browse(function ($browser) use($user){
            $browser->visit('/login')
                    ->assertPathIs('/login');
        });
    }

但是第二种方法失败并出现错误:

Unable to locate element: {"method":"css selector","selector":"body textarea[name='email']"}

我查看了屏幕截图错误,它显示用户在主页上,并且由于登录的用户无法登录,因此测试失败。

那么我怎样才能让黄昏将每个方法都视为一个单独的测试,而不是跨方法共享会话?

【问题讨论】:

    标签: laravel laravel-5 laravel-dusk


    【解决方案1】:

    使用它来删除测试之间的 cookie:

    protected function setUp() {
        parent::setUp();
    
        foreach(static::$browsers as $browser) {
            $browser->driver->manage()->deleteAllCookies();
        }
    }
    

    【讨论】:

    • 您能否就答案提供反馈?
    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 2020-03-03
    • 2017-12-07
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2021-11-23
    相关资源
    最近更新 更多