为什么新版文档中,数据库测试章节,使用 RefreshDatabase 重置数据库?
在前些日子的文档中
在使用laravel进行数据库测试的时候,在原本的文档中有两种重置数据库的方式:
使用迁移 use DatabaseMigrations;
使用事务 use DatabaseTransactions;
在今天的文档中
无论是官方文档
还是laravel-china翻译的文档
文档中提到的重置数据库的方式都是推荐使用 use RefreshDatabase;
实际测试
使用迁移重置数据库的时候,会清除掉数据库中原本的数据。在一些关于数据库相关的操作中,比如添加文章,那么添加后的文章id一定是固定的(因为是基于空数据库嘛)。但是使用迁移重置数据库的过程中速度比较慢。在我的测试中我的添加用户方法要接近5s
使用事务重置数据库的过程中,会遇到事务导致的一些问题:
比如我添加文章的过程中,使用了事务,但是添加成功之后,我忘记commit数据了。那么实际上我程序实现的功能是“假装”把数据添加进数据库了,实际上执行完这步操作之后,数据库并没有文章数据。
但是因为使用事务进行测试的时候,因为laravel为我们提供的事务系统。所以我们在测试中检查添加的数据的时候,会检查到正确的数据(实际上程序是错误的)。
除了以上情况,在实际使用过程中,使用事务回滚数据的方法进行测试的话,实际上速度要更快一些。同样是我的添加用户的方法,使用事务回滚进行测试的话,只需要接近1s的时间。
提问
这次文档的修改是因为官方有什么顾虑吗?使用事务进行测试的话,会不会有什么坑?求分享。官方会移除使用事务回滚数据库的方法吗?
推荐文章: