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

时间:2017-02-06 12:27:33

标签: php laravel phpunit laravel-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();
        }
    }
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

python -m unittest discover -p "Test*.py"

此代码行<?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方法没有用。