【问题标题】:Laravel Dusk, DatabaseTransactions not doing the RollBackLaravel Dusk,DatabaseTransactions 不执行回滚
【发布时间】:2018-03-28 19:42:45
【问题描述】:

我正在使用 Laravel Dusk,以下注册测试工作正常,除了它不会回滚事务(即在“注册”上创建的用户记录始终保留在数据库中)。 我的表都设置为使用 InnoDB 引擎。

对正在发生的事情有任何想法吗?我在很多地方都放了日志,看起来没有什么特别错误的。我在 laravel.log 文件中也没有任何错误。

use DatabaseTransactions;

protected $connectionsToTransact = [ 'mysql' ];

/**
 * A basic browser test example.
 *
 * @return void
 */
public function testBasicExample()
{
    $this->browse(function (Browser $browser) {
        $browser->visit('/')
                ->type('name', 'Automated User')
                ->type('email', 'autoemail@hotmail.com')
                ->type('password', 'aaaaaa')
                ->type('password_confirmation', 'aaaaaa')
                ->press('Register')
                ->assertPathIs('/login');
    });

}

这是我在 config/database.php 中的连接

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => 'innoDB',
    ],

更新

我尝试在断言之后更新模型,但它也不起作用。似乎所有的数据库事务一般都没有被执行。

【问题讨论】:

    标签: rollback laravel-dusk


    【解决方案1】:

    您不能在 Dusk 测试中使用 DatabaseTransactions。由于真正的浏览器正在打开您的网站,因此您的测试在不同的过程中运行。

    您必须自己撤消更改,例如通过删除注册用户。

    【讨论】:

    • 所以测试文档的官方数据库部分仅适用于 HTTP 测试?
    • 你的意思是什么文档?黄昏还是 Laravel?
    • 本文档仅适用于纯 Laravel 测试,例如 $this->get('/');。这些测试不会发出“真正的”HTTP 请求,它们只是假装这样做。因此它们使用相同的数据库连接并且可以封装在事务中。
    • 有道理。将那部分放在浏览器测试旁边似乎有点误导我。谢谢。
    • 他们在 Laravel 5.5 的 Dusk 页面上添加了一条注释:laravel.com/docs/5.5/dusk#migrations
    猜你喜欢
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2017-09-06
    • 2018-09-18
    • 2019-04-29
    • 1970-01-01
    相关资源
    最近更新 更多