簡體   English   中英

如何使用sinon監視ejs渲染功能

[英]How to spy on ejs render function with sinon

我想檢查是否使用正確的參數調用了“ 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文件

如果使用EJS調用res.render() ,則不是ejs.render()被調用,而是ejs.renderFile() )。

按照該方法的代碼路徑,它永遠不會調用ejs.render()

由於Sinon的工作方式,也無法ejs.renderFile() (對ejs.renderFile進行間諜監視將替換對renderFile方法的導出引用,但ejs使用內部引用)。

但是,您可以監視ejs.__express ,這是Express調用res.render()

const spy = sinon.spy(ejs, "__express");

編輯 :我現在意識到,您想確保是否使用正確的參數調用了res.render() ,因此窺探方法更有意義:

const { response } = require('express');

...

const spy = sinon.spy(response, 'render');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM