Laravel Dusk迁移回滚导致架构更改的异常

问题描述 投票:2回答:1

我正在尝试在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个回答
0
投票

即使您的数据库/迁移/文件夹中的未迁移迁移为零,并且您use DatabaseMigrations,黄昏也会在破坏测试之前运行迁移,而在运行测试之后进行回滚。

如果在开始黄昏时没有等待的出色迁移,它仍然会运行php artisan migrate,但不会迁移任何东西。

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

如果您没有准备好要运行的任何迁移,它将回滚之前的一批迁移。这可以是直接返回到2014_10_12_100000_create_password_resets_table框外的任何迁移。

所以回滚迁移时,您可能根本不想回滚,因此回滚可能删除了表,从而破坏了架构,填充了日志文件。

要了解这是怎么回事,请在开始测试之前查看迁移表,并按ID降序排序(最新迁移在顶部,并查看黄昏是否删除行。)>

要停止这种行为,请从测试班级中删除use DatabaseMigrations;

© www.soinside.com 2019 - 2024. All rights reserved.