记一次想简单化的单元测试

切换成内存数据库

记一次想简单化的单元测试

记得开启 pdo_sqlite

phpunit.xml修改

   <server name="DB_CONNECTION" value="sqlite"/>
   <server name="DB_DATABASE" value=":memory:"/>

记一次想简单化的单元测试

此时查询是没有表的,还需要执行迁移。

tests/TestCase.php执行迁移

  $this->artisan('migrate');

记一次想简单化的单元测试

运行

记一次想简单化的单元测试

记一次想简单化的单元测试

sqlite没有取消严格模式的选项

users 表有很多字段。
nickname avatar openid money pid invite_code …..

在填充测试数据的时候,真不想写那么多的 无关 字段。

无关字段: nickname(用户昵称) avatar(头像) openid 这些。
这些字段对于 测试订单 没有一点作用。

User::create([
    'invite_code' =>  app('invite_code')->enCode(1),
    'lv' => User::LV0
]);

这样会报错的,因为 openidunique 索引,一堆字段都是 not null

如果是 mysql 直接取消 严格模式 就可以了,可惜 sqlite 无此选项。

封装个懒人的插入数据方法

    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Support\Facades\Schema;

    function modelCreate(Model $model,$data = [])
    {
        $table = $model->getTable();
        $columns = Schema::getColumnListing( // 表的所有字段名称
            $table
        );

        $columns = array_fill_keys( // 转换成 ['nickname' => 0,'avatar' => 0] 这种格式
            array_values(
                $columns
            ),0
        );

        // 所有索引  处理unique
        $indexs = \DB::connection()->getDoctrineSchemaManager()->listTableDetails($table)->getIndexes();
        foreach ($indexs as $index)
            if( $index->isUnique())
                $columns[$index->getColumns()[0]] = rand(1,99999999999);

        $data = array_merge($columns,$data); // 覆盖
        unset($data['id']); // id自动维护

        return $model::unguarded(function () use ($data,$model){ // 忽略黑白名单
            return $model::create(
                $data
            );
        });
    }

记一次想简单化的单元测试

结尾

  1. 如果直接用 mysql 就没有那么多破事了。
  2. 为什么不用工厂填充? 要写太多字段,且数据不好控制,我只想要必要的测试数据。

我现在心态是炸的,什么鬼规….

本作品采用《CC 协议》,转载必须注明作者和本文链接
专心学习不瞎搞
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

实际上mysql也可以放内存里,有个叫tmpfs的东西了解一下

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
89
粉丝
108
喜欢
481
收藏
724
排名:108
访问:8.8 万
私信
所有博文
社区赞助商