PHPUnit/Cypress 在 Laravel 中测试 2 个数据库

PHPUnit/Cypress Testing 2 Databases in Laravel

(来自 https://laracasts.com/discuss/channels/testing/phpunitcypress-testing-2-databases 的交叉帖子)

大家好,我正在尝试为我的项目设置测试中途(因为我很傻,没有从一开始就写测试)

我将对项目进行快速总结,以便了解一些背景...

所以网站数据库有一个关系从用户加入到游戏数据库...

我有一个用于开发的游戏数据库的本地副本。对数据的更改不会影响任何实时内容。


无论如何,我希望这有点道理...关于问题...

我的问题是当我想用这些数据库测试我的应用程序时...

网站数据库非常简单,无论我使用 SQLite :memory: 数据库还是物理数据库,我都可以使用 RefreshDatabase 特性,PHPUnit/etc 将通过我的迁移处理刷新数据库它...一切都很好...据我所知没问题...

当我想通过测试处理第二个(游戏)数据库更改回滚时出现问题...我没有此数据库的迁移,因为它不受网站控制或管理。

我的问题是:

  1. 如何PHPUnit/cypress/etc重置由自动化测试引起的对第二个数据库(游戏数据库)的更改?
  2. 如果我必须为 #1 编写迁移或其他东西才能实现,我如何才能在应用程序环境测试时告诉迁移仅 运行? (即当 运行 在生产或本地环境中迁移美术时,游戏数据库的任何迁移都必须 NOT 运行)

基本上,我希望最终能够让 PHPUnit 将测试用例所需的数据插入到两个本地测试数据库中,然后让 PHPUnit 回滚更改。

我只是不确定如何处理通过 eloquent 访问但不受 laravel 迁移等管理的第二个数据库。它仅由 [=69= 访问].

希望所有这些杂乱无章的内容都是有道理的,如果有任何需要澄清的地方,我会尽量详细说明。

很可能我在这里遗漏了一些明显的东西。

所以我已经使用以下方法让它工作了。

通过指定 .env.testing 文件,我有两个单独的数据库用于测试。

第一个(网站)数据库正在用 Laravels RefreshDatabase trait

重置

正在使用以下代码重置第二个(游戏)数据库:

    public function setUp() : void {
        parent::setUp();
        \DB::connection('mysql2')->beginTransaction();
    }

    public function tearDown() : void {
        parent::tearDown();
        \DB::connection('mysql2')->rollBack();
    }

到目前为止它似乎工作正常,虽然我只写了几个测试...

如果有人有“更好”或“更合适”的答案,请告诉我! :D