我们生产环境使用postgresql,单元测试的时候使用的是sqlite3,ORM用的是sequelize,现在的一个问题是很多postgresql支持的语法到sqlite3上就不支持了,这个要怎么弄呢 比如数据类型为json的,需要使用$contains来进行查询,但是sqlite3不支持
为啥不同样pg呢? 我不喜欢orm,准备用 sql builder 的knex
@waitingsong typeorm 很好用~
@zuohuadong 我觉得和 nest 一样的复杂。。 还是先试试 knex 吧。
@waitingsong nest 用习惯了就觉得非常好用了~ 尤其是项目大一些的时候
@zuohuadong 小公司,我一人要负责框架选型,制作各端的开发框架模板以及相关的轮子,k8s/istio 基础设施的部署,开发流程规范的制订。实在没精力去折腾两三天都还没搞懂的技术。思路是尽量可控,降低技术风险, 先把整个流跑起来再说,功能不足以后再增加或者换框架。 这也是为公司核心(单体)项目接下来的大升级做技术预(cai)演(keng)。
@waitingsong 单元测试用了sqlite3的内存数据库,如果是pg的话,那是不是要单独准备一个数据库做测试才行,knex同样也是支持ORM的吧strapi就是knex
@a119347 可以考虑用docker做个单测基础pg镜像,然后用这个镜像跑测试。
@a119347 knex 算 Sql builder.
全栈框架CabloyJS的单元测试机制供参考:
CabloyJS后台基于EggJS,统一采用MySQL数据库
EggJS提供了三个运行环境:测试环境
、开发环境
、生产环境
。CabloyJS在EggJS的基础上,对这三个运行环境赋予了进一步的意义:
1、测试环境:当运行npm run test:backend
时,CabloyJS就会自动删除旧的测试数据库,建立新的数据库。从而便于总是从零状态开始单元测试
2、开发环境:当运行npm run dev:backend
时,CabloyJS会自动寻找最新创建的测试数据库,然后一直使用它。当然,如果在开发过程中,发现数据库架构变了,可以再执行一遍npm run test:backend
,就自动重建了全新的测试数据库,不必打开workbench之类的管理软件手工修改数据库架构
3、生产环境:当运行npm run start:backend
时,CabloyJS就会使用全新的生产数据库,正式使用