Laravel数据库测试在测试方面,Laravel内置的PHPUnit提供了非常方便的解决方案。对于数据库的增删改查测试,需要解决的一个很重要的问题就是测试完成后如何恢复数据库的原貌。比如测试一个用户注册的方法,需要往数据库中插入一条用户记录,但是测试完成后,我们不想把这个测试用例保存在数据库中。为了解决这个问题,Laravel提供了一个非常方便的解决方案:使用迁移:DatabaseMigrations使用事务:DatabaseTransactions参考:https://laravel.com/docs/5.3/database-testing#resetting-the-database-after-each-测试另一种方案:使用SQLite的内存数据库:memory:Laravel提供的两种方案,依然是对数据库进行读写操作。有时候你可能不想这样(比如多人共享一个在线开发数据库。),这时候,你也可以使用更优雅的方式:SQLlite,逻辑其实很简单:在运行测试用例的时候,将与SQLite的数据库连接。使用示例例如我们有如下测试类(此示例不具有代表性,仅用于说明问题,假设机器上已经安装了SQLite):classHomePageTestextendsTestCase{publicfunctiontestHomePage(){//创建一个测试用户,并保存$user=factory(App\User::class)->create();$this->actingAs($user)->visit('/home')->see('Dashboard');}}首先在Laravel的数据库配置文件中添加一个新的数据库连接'sqlite'=>['driver'=>'sqlite','database'=>':memory:','即config/的connections数组database.phpprefix'=>'',],这里一个很重要的参数是'database'=>':memory:',:memory:database是SQLite中内置的内存数据库,会存放在内存中每次运行测试用例时在中新建一个数据库,测试完成后自动清除并关闭数据库连接。隔离性好,而且因为是在内存中,所以速度也很快。这些特性对于测试来说非常方便。这也是为什么我们选择SQLite数据库作为测试库的一个很重要的原因。点击这里获得详细说明。然后需要修改PHPUnit的配置文件。在phpunit.xml中,将数据库连接改为刚才定义的SQLite连接
