2

我正在尝试在与我的应用程序分开的文件数据库中的 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 导致后续请求失败。

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

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

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

4

1 回答 1

0

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

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

测试完成后,它还将运行php artisan migrate:rollback. 这将减少最近一批迁移。

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

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

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

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

于 2019-10-17T03:30:17.137 回答