gpt4 book ai didi

javascript - 使用 Mocha 和 Sinon spy 在 promise 范围内测试 Express.js res.render

转载 作者:行者123 更新时间:2023-11-28 18:44:30 24 4
gpt4 key购买 nike

遵循与 this example 类似的模式我一直在尝试在 Express.js 应用程序中测试我的路由,但无法让我的 spy 验证包裹在 promise.then 中时是否已调用 res.render .

这是一个简化的示例,我希望 scribedOnce 为 true,但它返回 false。

测试中的代码:

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;
});
});

最佳答案

您必须等待 Promise 得到解决,这是一个异步操作。

由于 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;
});
});
});

关于javascript - 使用 Mocha 和 Sinon spy 在 promise 范围内测试 Express.js res.render,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35597164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com