测试Express.js res.render在承诺与Mocha&Sinon spy
Testing Express.js res.render within promise with Mocha & Sinon spy
按照与此示例类似的模式,我一直在尝试在 Express.js 应用程序中测试我的路由,但我无法让我的间谍验证res.render
在包装在promise.then
中时是否已被调用。
这是一个简化的示例,我希望calledOnce
为真,但它返回为假。
测试中的代码:
var model = {
get: function() {
return new Promise(function(res, rej) {
return res('success');
});
}
};
module.exports = function (req, res) {
model.get().then(function (data) {
res.render('home', data);
}).catch(function (err) {
console.log(err);
});
};
测试:
var expect = require('chai').expect;
var sinon = require('sinon');
var home = require('./home');
describe('home route', function() {
it('should return a rendered response', function() {
var req = {};
var res = {
render: sinon.spy()
};
home(req, res);
expect(res.render.calledOnce).to.be.true;
});
});
您必须等待承诺得到解决,这是一个异步操作。
由于 Mocha 原生支持 promise,因此您可以设置代码以将原始 promise 一直传递回 Mocha,并在链中插入一个测试用例:
// home.js
...
module.exports = function (req, res) {
// return the promise here
return model.get().then(function (data) {
res.render('home', data);
}).catch(function (err) {
console.log(err);
});
};
// test.js
describe('home route', function() {
it('should return a rendered response', function() {
var req = {};
var res = { render: sinon.spy() };
// Also return the promise here, and add an assertion to the chain.
return home(req, res).then(function() {
expect(res.render.calledOnce).to.be.true;
});
});
});
相关文章:
- jquery点击函数select&取消选择
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- Angular js-返回一个包含类似
- 一点javascript元编程&可链接的设置器
- 通过JSON&比较时间
- Jquery模板,如果xx&&如果yy
- jQuery工具验证器自定义效果-添加&消除影响
- Twitter引导程序Typeahead-Id&标签
- AngularJS&JSON-从Previous&下一个对象
- 什么是&&在没有if的行中的变量之间
- 关于引入外部javascript文件的问题&css通过https
- 指令的模板必须只有一个根元素:With restrict E&替换true
- 使用ajax的服务器端分页&jQuery
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 如何使用dropzone&vueJs
- 如何准确执行加载脚本&退出弹出窗口
- 如何添加CSS&JavaScript进入Windows窗体应用程序C#.net
- Solr查询以按日期月份获取数据&年
- 我们能在&在块到mocha的特定测试用例(it)之后
- Mocha&Chai在浏览器中进行异步测试