如何使用sinon监视ejs渲染功能

时间:2018-10-29 15:02:16

标签: javascript node.js mocha ejs sinon-chai

我想检查是否使用正确的参数调用了“ 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文件

1 个答案:

答案 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()