node.js - 当回调未作为参数传递时,如何使用 sinon 在 node.js 中对回调进行单元测试?
问题描述
var data = function (req, res, next) {
var data;
modelClass.getData(function (err, response) {
data = response[0];
req.headers[constants.DATA] = data;
next();
}
});
};
我将如何在 Node.js (express.js) 中对上述函数进行单元测试,尤其是当回调没有作为参数传入时?我打算使用Sinon单元测试框架。
此处显示的示例:youtube 教程仅显示了如何在回调作为参数传递时进行测试。
解决方案
基本上我们可以在单元测试中做一些检查:
- 检查是否
req.headers[constants.DATA]
有正确的值 - 检查是否
next
被调用
这是我测试该代码的示例
const chai = require('chai');
const assert = chai.assert;
const sinon = require('sinon');
const modelClass = require('...'); // your model class file
const src = require('...'); // your source file
describe('test', function() {
let req;
let res;
let next;
const response = [100];
beforeEach(function() {
// we mock `req` and `next` here
req = {
headers: {}
};
next = sinon.spy();
sinon.stub(modelClass, 'getData').yields(null, response); // for callback function, we use yields to trigger the callback
});
afterEach(function() {
sinon.restore();
})
it('run successfully', function() {
src.data(req, res, next);
assert.equal(req.headers[constants.DATA], 100);
assert(next.calledOnce);
});
});
推荐阅读
- javascript - 在哪里可以找到曲线方程来生成适合绘图曲线的随机种子数据点?
- windows - 在特定目录中启动 Windows 命令提示符
- excel - Excel COUNTIF 匹配目标的变体:LET 解决方案?
- r - 使用 pheamap 将特定颜色分配给热图中的一系列值
- java - 没有方法实现:协议文件:#'clojure.java.io/Coercions 找到类:leiningen 项目文件中的 java.lang.Character
- python - 如何在 python 中将数据集拆分为多个数据框?
- r - 在R中的目录中访问具有不同文件类型的文件
- git - “zsh:未找到事件:”如何在 mac bash 上从 git 中排除文件?
- reporting-services - SSRS 散点图的特定 X 值标签
- git - git pull 是否可以从另一个目录中提取?