我想检查是否使用正确的参数调用了“ res.render”。
it("Renders the page where a new user can be created", done => {
const spy = sinon.spy(ejs, "render");
chai
.request(app)
.get("/users/create")
.end((err, res) => {
res.should.have.status(200);
spy.should.have.been.calledOnce;
done();
});
});
即使认为render函数被调用,测试报告也告诉我从来没有调用render函数。
Uncaught AssertionError: expected render to have been called exactly once, but it was called 0 times
如何监视在响应对象上调用的ejs渲染函数并断言是否使用正确的参数调用它?
编辑:我们的项目正在使用express-ejs-layouts呈现ejs文件
答案 0 :(得分:0)
如果您使用EJS调用res.render()
,则调用的不是ejs.render()
,而是ejs.renderFile()
(source)。
遵循该方法的代码路径,它从不调用ejs.render()
。
也无法对ejs.renderFile()
进行监视,因为Sinon的工作原理(对ejs.renderFile
的监视将替换对renderFile
方法的 exported 引用,但是{ {1}}使用内部参考。
但是,您可以监视ejs
,这是Express会调用ejs.__express
的功能:
res.render()
编辑:我现在意识到,您想确定是否使用正确的参数调用了const spy = sinon.spy(ejs, "__express");
,因此更间谍地监视那个方法:
res.render()