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

切换成内存数据库

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

记得开启 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 协议》,转载必须注明作者和本文链接
专心学习不瞎搞
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 1

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

4年前 评论

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