繁体   English   中英

在 Laravel Dusk 测试运行后从数据库中删除模型?

[英]Deleting models from database after Laravel Dusk tests have run?

我刚开始看 Dusk - 我正在测试一些用户功能。

下面是我当前的测试,但是我正在尝试自己清理 - 例如,应该从数据库中删除新创建的用户。

我试过使用tearDown方法,但它似乎并没有真正删除它。

我通常会如何启动需要被丢弃的临时模型?

<?php

namespace Tests\Browser;

use App\User;
use Tests\DuskTestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class LoginTest extends DuskTestCase
{

    protected $user = null;

    public function testIfPublicUsersLogin()
    {
        $this->user = $user = factory(User::class)->create([
            'is_student' => 0
        ]);

        $this->browse(function ($browser) use ($user) {

            $browser->visit('/login')
                ->assertVisible('#email')
                ->type('#email', $user->email)
                ->type('#password', 'secret')
                ->press('#loginButton')
                ->assertPathIs('/play');
        });
    }

    public function tearDown()
    {
        if ($this->user) {
            User::destroy($this->user->id);
            //$this->user->delete();
        }
    }
}

有多种方法可以实现这一点:

  1. 使用 DatabaseTransactions 特性,以便在每次测试后都有一个事务回滚。 为此添加: use Illuminate\\Foundation\\Testing\\DatabaseTransactions; 在你的 php 文件中添加use DatabaseTransactions; 在你的测试课上
  2. 如果您想在每次测试之前和之后迁移和迁移回滚而不是将它们包装到事务中,您可能需要使用 DatabaseMigrations 特性。 为此添加: use Illuminate\\Foundation\\Testing\\DatabaseMigrations; 在你的 php 文件中添加use DatabaseMigrations; 在你的测试课上
  3. 如果要使用自定义设置和拆卸方法,请使用afterApplicationCreatedbeforeApplicationDestroyed方法来注册回调
<?php

namespace Tests\Browser;

use App\User;
use Tests\DuskTestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class LoginTest extends DuskTestCase
{

    protected $user = null;

    public function testIfPublicUsersLogin()
    {
        $this->user = $user = factory(User::class)->create([
            'is_student' => 0
        ]);

        $this->browse(function ($browser) use ($user) {

            $browser->visit('/login')
                ->assertVisible('#email')
                ->type('#email', $user->email)
                ->type('#password', 'secret')
                ->press('#loginButton')
                ->assertPathIs('/play');

            $user->delete();
        });
    }
}

此代码行$user->delete测试后删除您的数据。 tearDown方法没用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM