Laravel Dusk迁移回滚导致架构更改了例外

时间:2017-07-20 16:46:39

标签: laravel laravel-dusk

我正在尝试在与我的应用程序分开的文件数据库中的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

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

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

如果我允许回滚但是在测试期间没有运行任何工厂,它会回滚很好。

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

1 个答案:

答案 0 :(得分:0)

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

如果您开始黄昏时没有任何未完成的迁移在等待,它将继续运行php artisan migrate,但不会进行任何迁移。

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

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

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

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

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