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

切换成内存数据库

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

记得开启 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 协议》,转载必须注明作者和本文链接
专心学习不瞎搞
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

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

4年前 评论

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