簡體   English   中英

sinon存根不替換功能

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

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