[英]sinon stub not replacing function
我正在嘗試使用 sinon 存根來替換可能需要很長時間的函數。 但是當我運行測試時,測試代碼似乎沒有使用 sinon 存根。
這是我要測試的代碼。
function takeTooLong() {
return returnSomething();
}
function returnSomething() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('ok')
}, 1500)
})
}
module.exports = {
takeTooLong,
returnSomething
}
這是測試代碼。
const chai = require('chai')
chai.use(require('chai-string'))
chai.use(require('chai-as-promised'))
const expect = chai.expect
chai.should()
const db = require('./database')
const sinon = require('sinon')
require('sinon-as-promised')
describe('Mock the DB connection', function () {
it('should use stubs for db connection for takeTooLong', function (done) {
const stubbed = sinon.stub(db, 'returnSomething').returns(new Promise((res) => res('kk')));
const result = db.takeTooLong()
result.then((res) => {
expect(res).to.equal('kk')
sinon.assert.calledOnce(stubbed);
stubbed.restore()
done()
}).catch((err) => done(err))
})
我收到斷言錯誤
AssertionError: expected 'ok' to equal 'kk'
+ expected - actual
-ok
+kk
我做錯了什么? 為什么不使用存根? Mocha 中的測試框架。
Sinon 存根對象的property
,而不是函數本身。
在您的情況下,您是在對象中導出該函數。
module.exports = {
takeTooLong,
returnSomething
}
因此,為了從對象正確調用函數,您需要將函數調用替換為對導出對象的引用,例如:
function takeTooLong() {
return module.exports.returnSomething();
}
當然,根據您的代碼,您可以隨時重構它:
var exports = module.exports = {
takeTooLong: function() { return exports.returnSomething() }
returnSomething: function() { /* .. */ }
}
您可能想查看 Proxyquire 以存根/監視直接導出的函數。 https://www.npmjs.com/package/proxyquire/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.