時間がかかる可能性のある関数を置き換えるために、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
私は何が間違っているのですか?スタブが使用されていないのはなぜですか?モカのテストフレームワーク。
Sinonは、関数自体ではなく、オブジェクトのproperty
をスタブします。
あなたの場合、オブジェクト内でその関数をエクスポートしています。
module.exports = {
takeTooLong,
returnSomething
}
したがって、オブジェクトから関数を適切に呼び出すには、関数呼び出しを次のようなエクスポートオブジェクトへの参照に置き換える必要があります。
function takeTooLong() {
return module.exports.returnSomething();
}
もちろん、コードに基づいて、いつでもリファクタリングできます。
var exports = module.exports = {
takeTooLong: function() { return exports.returnSomething() }
returnSomething: function() { /* .. */ }
}