Laravel Dusk:迁移和种子测试数据库一次

Posted

技术标签:

【中文标题】Laravel Dusk:迁移和种子测试数据库一次【英文标题】:Laravel Dusk: Migrate and Seed Testing DB Once 【发布时间】:2020-06-04 12:12:39 【问题描述】:

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

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

示例:

<?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()
     
    


【问题讨论】:

【参考方案1】:

不要使用数据库迁移。 只是: $this->artisan('migrate:fresh'); $this->artisan('db:seed'); 喜欢:

public function setUp(): void
    
        $this->appUrl = env('APP_URL');
        parent::setUp();
        $this->artisan('migrate:fresh');
        $this->artisan('db:seed');
    

在您的第一次浏览器测试中

【讨论】:

【参考方案2】:

是的,你可以这样做

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 方法在每个测试方法之前运行,如果迁移已运行一次,则不会再次运行。

【讨论】:

我刚看到你的回答,它对我不起作用第二次测试没有成功,它重定向到在票证页面上插入的登录页面以创建票证,当我复制登录代码时第二次测试(创建票证)它没有成功,好像用户表被回滚了! @Learner 你只需要删除 use DatabaseMigrations 特征。所以它不会为每个测试重置数据库。

以上是关于Laravel Dusk:迁移和种子测试数据库一次的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Dusk 忽略 .env.dusk 和 .env.dusk.local(使用 Valet 和 Laravel 5.5)

迁移后的 Laravel 种子

使用 phpunit.xml、.env.dusk.local 和 sqlite 内存数据库设置 Laravel 5.4 和 Dusk

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

在没有 Laravel 的情况下使用 Laravel 数据库迁移和种子 [关闭]

如何使用 laravel 迁移和种子正确处理数据库数据更改