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

Php 在Laravel黄昏测试运行后从数据库中删除模型?,php,laravel,phpunit,laravel-dusk,Php,Laravel,Phpunit,Laravel Dusk,我只是从看黄昏开始——我正在测试一些用户功能 下面是我当前的测试,但是我正在尝试在自己完成后进行清理-例如,新创建的用户应该从数据库中删除 我尝试过使用tearDown方法,但实际上似乎并没有删除它 我通常会如何去旋转那些需要被丢弃的临时模型 <?php namespace Tests\Browser; use App\User; use Tests\DuskTestCase; use Illuminate\Foundation\Testing\DatabaseMigrations;

我只是从看黄昏开始——我正在测试一些用户功能

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

我尝试过使用
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();
        }
    }
}

实现这一点有多种方法:

  • 使用DatabaseTransactions特性,以便在每次测试后都有事务回滚。为此,添加:
    使用illumb\Foundation\Testing\DatabaseTransactions并使用DatabaseTransactions在测试类中
  • 如果希望在每次测试之前和之后进行迁移和迁移回滚,而不是将它们包装到事务中,则可能需要使用DatabaseMigrations特性。为此,添加:
    使用illumb\Foundation\Testing\DatabaseMigrations并使用DatabaseMigrations在测试类中
  • 如果要使用自定义设置和拆卸方法,请使用
    应用程序创建后
    和应用程序选择前
  • 方法 而是注册回调
    
    
    <?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();
            });
        }
    }