Seg*_*Dev 2 postgresql unit-testing laravel-5
我最近指出现有的 laravel 项目使用新的 postgres 数据库。新的 postgres 数据库由 Rails API 应用程序维护,该应用程序为其执行所有迁移。
我的问题是,对于这个设置,对 laravel 项目进行单元测试的最佳方法是什么。目前,所有现有的单元测试都被破坏了,因为它们都使用以下方法保存到数据库中:
use DatabaseMigrations;
Run Code Online (Sandbox Code Playgroud)
Laravel 应用程序将不再进行迁移,但仍直接访问数据库,并且当前不通过 Rails api 访问数据。
我应该在单元测试中模拟数据库请求吗?
或者
由于如果 postgres 测试数据库已经随表一起迁移(通过 Rails 应用程序迁移测试数据库),我仍然可以运行命中数据库的单元测试,因此有没有办法在运行单元测试后清空数据库而不导致能力下降并迁移表?我可以以某种方式使用事务并回滚我在特定单元测试中完成的所有事务吗?
谢谢
所以我相信我已经弄清楚了。我有使用事务而不是迁移进行单元测试的正确想法。
在 Laravel 测试类中,不要使用
use DatabaseMigrations;
Run Code Online (Sandbox Code Playgroud)
您可以使用
use DatabaseTransactions;
Run Code Online (Sandbox Code Playgroud)
这将使用数据库中的当前表。就我而言,我指出我的测试使用我为测试而设置的特定数据库,称为“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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |