首页 > 解决方案 > Laravel Dusk:迁移和种子测试数据库一次

问题描述

是否可以运行一次迁移和播种并且不刷新测试方法之间的测试数据库?

我有几个相互依赖的测试功能,我不想在一个测试文件中的每个测试之前和之后迁移和播种数据库。

例子:

<?php

namespace Tests\Browser;

use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Carbon\Carbon;

class AdminTest  extends DuskTestCase
{
  use DatabaseMigrations;

  /**
   * Define hooks to migrate the database before and after each test.
   *
   * @return void
   */
   protected function setUp(): void
    {
        parent::setUp();
        $this->artisan('db:seed', ['--class' => 'DatabaseSeeder']);
    }

    public function testAdminCanLogin()
    {
    }

    /* Create New ticket */
    public function testAdminCreateTicket()
    { 
    }

    /* View the first ticket */
    public function testAdminViewTicket()
    {
    }

    /* Edit the first ticket */
    public function testAdminEditTicket()
    {
    }

    /* Assign the first Ticket to an Agent */
    public function testAdminAssignTicketToAgent()
    {
    }

    /* Unassign the first Ticket from Agent */
    public function testAdminUnassignAgentFromTicket()
    {
    }

    /* Delete the first ticket */
    public function testAdminDeleteTicket()
    {
    }

    /* Restore the first ticket */
    public function testAdminRestoreTicket()
    { 
    }

}

标签: laravel-dusklaravel-migrationslaravel-seeding

解决方案


是的,你可以这样做

protected static $migrationRun = false;

public function setUp(): void{
    parent::setUp();

    if(!static::$migrationRun){
        $this->artisan('migrate:refresh');
        $this->artisan('db:seed');
        static::$migrationRun = true;
    }
}

将其包含在您的黄昏测试课程中。setUp方法在每个测试方法之前运行,如果迁移已运行一次,则不会再次运行。


推荐阅读