gpt4 book ai didi

postgresql - 如何在无法迁移表的情况下对 Laravel 应用程序进行单元测试,因为迁移是由另一个应用程序处理的

转载 作者:行者123 更新时间:2023-11-29 13:43:01 25 4
gpt4 key购买 nike

我最近指出现有的 laravel 项目使用新的 postgres 数据库。新的 postgres 数据库由 Rails API 应用程序维护,该应用程序为其执行所有迁移。

我的问题是,对于这个设置,对 laravel 项目进行单元测试的最佳方法是什么。目前所有现有的单元测试都被破坏了,因为它们都使用

保存到数据库中
use DatabaseMigrations;

Laravel 应用程序将不再进行迁移,但仍直接访问数据库,并且当前不通过 Rails api 访问数据。

我应该在单元测试中模拟数据库请求吗?

由于如果 postgres 测试数据库已经随表一起迁移(通过 Rails 应用程序迁移测试数据库),我仍然可以运行访问数据库的单元测试,因此有没有办法在运行单元测试后清空数据库< em>没有删除和迁移表的能力?我可以以某种方式使用事务并回滚我在特定单元测试中完成的所有事务吗?

谢谢

最佳答案

所以我相信我已经弄清楚了。我有使用事务而不是迁移进行单元测试的正确想法。

在 Laravel 测试类中,而不是使用

use DatabaseMigrations;

你可以使用

use DatabaseTransactions;

这将使用数据库中的当前表。就我而言,我指出我的测试使用我为测试而设置的特定数据库,称为“my_project_test”(假设常规应用程序数据库将称为“my_project”),我已经在其中迁移/创建了表。测试完成后,它将“回滚”/恢复您从数据库插入或删除的任何数据,以将其恢复到之前的状态。如果您使用 DatabaseMigrations 或 DatabaseTranactions,断言的行为应该相同。只需确保您的测试数据库完全更新到其迁移即可。

类的示例...

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Routing\Route;

class UserControllerTest extends TestCase
{
//Instead of DatabaseMigrations use DatabaseTransactions instead.
//use DatabaseMigrations;
use DatabaseTransactions;

... unit tests for class
}

关于postgresql - 如何在无法迁移表的情况下对 Laravel 应用程序进行单元测试,因为迁移是由另一个应用程序处理的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52573857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com