用另一种方法来进行Laravel数据库测试(SQLite)_Yii_青云站长教程网
欢迎来到站长教程网!
  • 秒到短信接口 免费试用
  • 微信支付宝接口 秒结算
  • 中文网站排名|申请加入
  • 搜索引擎全站查询
  • 查询移动网站权重数据
  • 海外主机 台湾公司直销
  • Yii

    当前位置:主页 > 网络编程 > Yii >

    用另一种方法来进行Laravel数据库测试(SQLite)

    时间:2019-10-10|栏目:Yii|点击:
  • 这篇文章主要介绍了关于用另一种方法来进行Laravel数据库测试(SQLite),有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

    Laravel数据库测试

    在测试方面,Laravel内置使用PHPUnit提供了非常方便的解决方案。而对于数据库增删改查的测试,要解决的一个很重要的问题就是如何在测试完成之后,恢复数据库的原貌,例如要测试一个用户注册的方法,需要插入一条用户记录到数据库,但是测试完成之后,我们并不想让这条测试用例保存在数据库里。为了解决这个问题,Laravel提供了非常方便的方案:

    使用迁移:DatabaseMigrations

    使用事务:DatabaseTransactions

    参考资料:https://laravel.com/docs/5.3/database-testing#resetting-the-database-after-each-test另外一种解决方案:使用SQLite的内存数据库:memory:

    Laravel提供的两种解决方案,仍然对数据库进行了读写操作,某些时候你可能并不想这样(例如多人共享一个线上开发数据库),此时,还可以用一种更为优雅的方式:SQLlite,逻辑其实也非常简单:就是在跑测试用例的时候,将数据库的连接替换为SQLite。

    使用示例

    例如我们有以下测试类(该事例并不具有代表性,仅用于说明问题,并假设本机已经安装SQLite):

    class HomePageTest extends TestCase { public function testHomePage() { // 创建一个测试用户,并保存 $user = factory(App\User::class)->create(); $this->actingAs($user)->visit('/home')->see('Dashboard'); } }

    首先在Laravel的数据库配置文件,即config/database.php的connections数组中添加一个新的数据库连接

    'sqlite' => [ 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ],

    这里一个非常重要的参数就是'database' => ':memory:',:memory:数据库是SQLite中内置的一个内存数据库,每次运行测试用例的时候都会在内存中创建一个新的数据库,并在测试完成关闭数据库连接后,自动清除掉,具有良好的隔离性,又因为是在内存中的,所以速度也很快,这些特性对于测试非常方便,这也是我们选用SQLite数据库作为测试库的一个非常重要的原因。有关详细解释,点击这里。

    然后需要修改PHPUnit的配置文件,在phpunit.xml中,将数据库连接改为刚刚定义的SQLite连接

    <php> <env name="APP_ENV" value="testing"/> <env name="CACHE_DRIVER" value="array"/> <env name="SESSION_DRIVER" value="array"/> <env name="QUEUE_DRIVER" value="sync"/> <!-- 将数据库连接改为刚刚定义的SQLite连接 --> <env name="DB_CONNECTION" value="sqlite" /> </php>

    这会覆盖.env中定义的数据库连接DB_CONNECTION=mysql,并告诉框架在运行测试的时候,用sqlite连接代替mysql连接。

    最后需要在运行测试用例之前执行数据库迁移,在测试类的基类,即TestCase.php中添加setUp方法

    public function setUp() { parent::setUp(); // 执行数据库迁移 $this->artisan('migrate'); }

    这样在每次执行测试用例之前,都会向SQLite的:memory:数据库中执行所有的迁移,生成业务逻辑所需的数据表。

    方案优缺点

    该方案关键点在于使用SQLite内置的一个内存数据库:memory:,因此速度比较快,有很好的隔离性,也不会对我们的开发数据库有任何的影响。

    当然该方案也有缺点,假如项目的数据库庞大,有大量的数据表或者迁移文件,会消耗大量内存,当运行测试的时候可能会由于内存不足,导致测试中断。此时需要为PHP分配合适的内存,在php.ini中修改配置memory_limit = 128M

    以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

    相关推荐:

    如何解决Laravel.log 文件写入的问题

    Laravel开发环境部署之homestead 安装配置过程(windows系统)

    laravel的路由(router)图文详解

    以上就是用另一种方法来进行Laravel数据库测试(SQLite)的详细内容,更多请关注php中文网其它相关文章!

    上一篇:你真的了解PHP foreach吗?非常清晰的用法实例讲解

    栏    目:Yii

    下一篇:PHP的安装以及与apache整合的介绍

    本文标题:用另一种方法来进行Laravel数据库测试(SQLite)

    本文地址:http://www.jh-floor.com/wangluobiancheng/Yii/86809.html

    广告投放 | 联系我们 | 版权申明

    重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

    如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

    联系QQ:888888 | 邮箱:888888#qq.com(#换成@)

    Copyright © 2002-2017 青云站长教程网 版权所有 琼ICP备xxxxxxxx号