Laravel 5.3 DatabaseMigrations 具有破坏性
Laravel 5.3 DatabaseMigrations are destructive
Laravel 5.3 与 mysql,PHPUnit 5.7.4
当我使用 use DatabaseMigrations;
在 PHPUnit 中创建测试时,它会破坏它查询的数据。
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ThingsTest extends TestCase
{
use DatabaseMigrations;
/** @test */
public function there_are_more_than_1000_things()
{
$things = App\Thing::all();
$this->assertGreaterThan(1000, count($things));
}
在我运行phpunit
之前,有很多东西。在 运行 之后,mysql 说 ERROR 1146 (42S02): Table 'database.things' doesn't exist
有什么办法可以阻止这种情况吗?
您可以在 Laravel 应用程序中使用带有 PHPUnit 的测试数据库。现在您的测试正在使用您的主数据库并将修改现有信息。
请参阅 了解如何执行此操作。
DatabaseMigrations
是一个特征,它执行:
- 测试前 'php artisan migrate' // 创建您的表,但不为它们播种
- 测试后'php artisan migrate:rollback' // 删除表
所以,第一 - 确保您正在使用另一个数据库进行测试。
第 2 - 在测试您的 Things class.
之前,在您的表中植入虚假数据
选择:
使用 DatabaseTransactions
特征而不是 DatabaseMigrations
。
在这种情况下,每个测试 activity 都将包含在数据库事务中。测试后,您的所有更改将被事务的回滚自动删除。
Laravel 5.3 与 mysql,PHPUnit 5.7.4
当我使用 use DatabaseMigrations;
在 PHPUnit 中创建测试时,它会破坏它查询的数据。
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ThingsTest extends TestCase
{
use DatabaseMigrations;
/** @test */
public function there_are_more_than_1000_things()
{
$things = App\Thing::all();
$this->assertGreaterThan(1000, count($things));
}
在我运行phpunit
之前,有很多东西。在 运行 之后,mysql 说 ERROR 1146 (42S02): Table 'database.things' doesn't exist
有什么办法可以阻止这种情况吗?
您可以在 Laravel 应用程序中使用带有 PHPUnit 的测试数据库。现在您的测试正在使用您的主数据库并将修改现有信息。
请参阅
DatabaseMigrations
是一个特征,它执行:
- 测试前 'php artisan migrate' // 创建您的表,但不为它们播种
- 测试后'php artisan migrate:rollback' // 删除表
所以,第一 - 确保您正在使用另一个数据库进行测试。
第 2 - 在测试您的 Things class.
之前,在您的表中植入虚假数据选择:
使用 DatabaseTransactions
特征而不是 DatabaseMigrations
。
在这种情况下,每个测试 activity 都将包含在数据库事务中。测试后,您的所有更改将被事务的回滚自动删除。