我用Node.js和felixge的node-mysql客户机.我没有使用ORM.

我正在用誓言进行测试,希望能够模拟我的数据库,可能使用Sinon.由于我本身并没有DAL(除了node-mysql个),我真的不知道该怎么做.我的模型大多是简单的积垢,有很多Getters .

关于如何实现这一点有什么 idea 吗?

推荐答案

使用sinon,您可以在整个模块周围放置模拟或存根.例如,假设mysql模块有一个函数query:

var mock;

mock = sinon.mock(require('mysql'))
mock.expects('query').with(queryString, queryParams).yields(null, rows);

queryStringqueryParams是您期望的输入.rows是您期望的输出.

当您正在测试的类现在需要mysql并调用query方法时,它将被sinon拦截和验证.

在你的测试期望部分,你应该有:

mock.verify()

在拆卸过程中,您应该将mysql恢复到正常功能:

mock.restore()

Mysql相关问答推荐

过程/别名是有点长的MySQL命令的一部分吗?

使用 awk 重写 maxscale 过滤器

MySql SELECT 查找包含数字的区间的时间复杂度是多少?

MySQL CHECK 约束以确保记录不使用自动增量 ID 引用自身?

使用sql查找源和最终目的地

0000-00-00 00:00:00 表中的日期设置为 NOT NULL

mysql insert into select join - 通过连接表将值从一列复制到另一表

MySQL 将分组 JSON Select 转换为单个 JSON 对象

SQL / MySQL:如何在WHERE IN中判断类似于OR的AND逻辑

按 SQL 删除分组前的重复项

MYSQL LOAD DATA INFILE 语句适用于工作台,但不适用于 python

在mysql中将纪元数转换为人类可读的日期

在连接条件上使用 IS NULL 或 IS NOT NULL - 理论问题

如何在 MySQL 中删除此索引?

如何改进 INSERT INTO ... SELECT 锁定行为

MySQL查询/子句执行顺序

比较 MySQL 中的日期忽略 DateTime 字段的时间部分

将行插入 MySQL 数据库的最有效方法

如何从命令行调用带有参数的mysql存储过程?

来自 MySQL 中多个表的 COUNT(*)