【问题标题】:Laravel Dusk Migration Rollback Causing Schema Changed ExceptionsLaravel Dusk 迁移回滚导致架构更改异常
【发布时间】:2017-07-20 16:46:38
【问题描述】:

我正在尝试在与我的应用程序分开的文件数据库中的 sqlite 上运行一些浏览器测试。

我在一个进程中运行

APP_ENV=local artisan serve --env=dusk.local

在另一个我跑

APP_ENV=local artisan dusk

似乎发生的是我的测试运行、数据库迁移、运行我的测试,该测试通过然后按预期回滚。

然而,在成功的测试之后,我的 Laravel 日志中充满了大量的异常,这些异常不同于在没有架构和数据的情况下发出请求时所预期的异常,以及其他诸如

General error: 17 database schema has changed in [...]/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:91

我不明白为什么它会在成功测试后发出请求或做某事。

class RegistrationTest extends DuskTestCase
{
    use DatabaseMigrations;

    public function testUserCanRegister()
    {
        // Some factories here

        $this->browse(function (Browser $browser) {
            $browser->visit('/register')
                ->assertSee('Sign up');
        });
    }

产量

PHPUnit 5.7.21 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 5.5 seconds, Memory: 22.00MB

OK (1 test, 1 assertion)

但是如果我跟踪它们,我会看到我的日志文件充满了错误。

任何人都能够阐明可能发生的事情?

我正在使用的黄昏环境文件如下

APP_ENV=local
APP_KEY=...
APP_URL=http://localhost:8000

DB_DEFAULT=app_testing
DB_CONNECTION=app_testing
SECOND_DB_CONNECTION=other_testing #app uses 2 separate databases

SESSION_DRIVER=file

更新:一些格式错误的资产 URL 导致后续请求失败。

但是,如果我禁用回滚,则不会创建任何上述记录的异常。如果数据存在,回滚似乎会导致问题。

如果我允许回滚但在测试期间不运行任何工厂,它可以正常回滚。

如果我在测试期间插入数据后允许回滚,它会回滚但有很多异常。

【问题讨论】:

    标签: laravel laravel-dusk


    【解决方案1】:

    即使您的 database/migrations/ 文件夹中有零个非迁移迁移,并且您 use DatabaseMigrations,黄昏也会在破坏您的测试之前运行迁移,并在运行测试后运行回滚。

    如果在你开始黄昏时没有未完成的迁移等待,它仍然会运行 php artisan migrate,但不会迁移任何内容。

    测试完成后,它还会运行php artisan migrate:rollback。这将回退最近的一批迁移。

    如果您没有准备好运行任何迁移,它将回滚前一批迁移。这可以是任何迁移到开箱即用的2014_10_12_100000_create_password_resets_table

    因此,在回滚您根本不想回滚的迁移时,回滚可能已经删除了表,破坏了您的架构,填充了您的日志文件。

    要了解这是否是正在发生的事情,请在开始测试之前查看您的迁移表,按 id 降序排序(最近的迁移在顶部)并查看黄昏是否删除了行。

    要阻止这种行为,请从测试类中取出 use DatabaseMigrations;

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 2016-08-15
      • 1970-01-01
      • 2015-09-06
      • 2021-07-01
      • 2012-09-13
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      相关资源
      最近更新 更多