Javascript sinon存根不替换函数
我正在尝试使用sinon存根替换一个可能需要很长时间的函数。但是当我运行测试时,测试代码似乎没有使用sinon存根 这是我要测试的代码Javascript sinon存根不替换函数,javascript,node.js,unit-testing,mocha.js,sinon,Javascript,Node.js,Unit Testing,Mocha.js,Sinon,我正在尝试使用sinon存根替换一个可能需要很长时间的函数。但是当我运行测试时,测试代码似乎没有使用sinon存根 这是我要测试的代码 function takeTooLong() { return returnSomething(); } function returnSomething() { return new Promise((resolve) => { setTimeout(() => { resolve('ok')
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保留对象的
属性,而不是函数本身
在本例中,您是在对象中导出该函数
module.exports = {
takeTooLong,
returnSomething
}
因此,为了正确地从对象调用函数,需要将函数调用替换为对导出对象的引用,如:
function takeTooLong() {
return module.exports.returnSomething();
}
当然,根据您的代码,您可以随时对其进行重构:
var exports = module.exports = {
takeTooLong: function() { return exports.returnSomething() }
returnSomething: function() { /* .. */ }
}
您可能想看看直接导出的stub/spy函数的Proxyquire。
你能在你正在测试的代码和测试代码中添加你的导出
和要求
方法吗?现在还有存根函数吗?@AtulKumar Fakes可能就是你想要的?