Laravel 5.3 with mysql,PHPUnit 5.7.4
当我在PHPUnit中使用use DatabaseMigrations;
创建测试时,它会销毁它查询的数据。
<?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
如何阻止这种想法?
答案 0 :(得分:2)
DatabaseMigrations
是一个特质,它是高管:
所以,1 - 确保你正在使用另一个数据库进行测试。
第二个 - 在测试你的Things类之前使用假数据种子。
<强>替代:强>
使用DatabaseTransactions
特征代替DatabaseMigrations
。
在这种情况下,每个测试活动都将包装在数据库事务中。测试完成后,所有更改都将通过事务的自动回滚来删除。
答案 1 :(得分:1)
您可以在Laravel应用程序中使用带有PHPUnit的测试数据库。现在,您的测试正在使用您的主数据库,并将修改现有信息。
请参阅https://stackoverflow.com/a/35228697/823549了解如何执行此操作。