[英]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.