我在写测试时遇到了一个大问题。我使用laravel5.6.0作为框架,phpunit7.0进行测试。作为一个测试数据库,我在内存中使用了sqlite。这是我的 database.php
:
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
但我的问题是我有好几个地方 whereRaw
,例如 $query->whereRaw('STR_TO_DATE(CONCAT(
日期 , " ",
从 ), "%Y-%m-%d %k") < ?', [$before]);
. 这里的问题是sqlite没有 STR_TO_DATE
或者 CONCAT
mysql拥有的函数。因此phpunut抛出了一堆错误。
我的解决方案是使用mysql数据库作为测试数据库。但这似乎不起作用,因为我得到了几个不同的错误,主要是我有几个测试外键约束失败。
举个例子,我的基本测试用例中有以下内容 setUp
方法:
if (Schema::hasTable('gym_schedule') && !empty(GymSchedule::createGymSchedules())) {
$this->artisan('db:seed', ['--class' => 'GymScheduleTableSeeder']);
}
每次都失败,除了第一次,因为它说 a schedùle with id 1
已经存在( id
是我的主键)。我确实尝试使用 tearDown
,但这一点都没有帮助,而且测试变得非常缓慢,每次测试3秒。
所以基本上这种方法也不起作用。
我不知所措。我试过用google搜索这个并在stackoverflow中搜索。我愿意接受任何不太复杂的建议(要么以某种方式删除所有mysql函数,要么解决mysql的使用问题,要么真的解决任何其他问题)。
有人有好主意吗?
1条答案
按热度按时间piztneat1#
关于问题的第一部分,在使用
whereRaw()
,我是这样写方法的: