【问题标题】:Using sinon how do I stub or fake the property of a callback使用 sinon 我如何存根或伪造回调的属性
【发布时间】:2018-11-23 19:51:06
【问题描述】:

使用 sinon 如何在 db.run 函数中存根/伪造 this.lastID 的返回值。

module.exports.insert = async(request) => {
    //unimportant code
    return new Promise((resolve, reject) => {
        db.run(sql, params, function(err) {
            if (err)
                reject(err)
            else
                resolve(this.lastID)
        })
    })
}

我可以使用以下代码伪造回调:

describe('insert', () => {
    beforeEach(() => {
        this.insert = sinon.stub(db, 'run')
            .callsArgWith(2, null)
    })

    afterEach(() => {
        this.insert.restore()
    })

    test('add product to the database', async(done) => {
        expect.assertions(1)
        const id = await productDb.insert(testProductAlt)
        expect(isNaN(id)).toBe(false)
        expect(id).toBe('1')
        done()
    })
})

但由于 this.lastID 未定义,它会失败。我该如何克服这个问题?

谢谢!

【问题讨论】:

    标签: javascript node.js jestjs sinon


    【解决方案1】:

    您可以使用stub.callsArgOn() 传递一个上下文值,该值将在回调中用作this。你会用类似这样的东西来存根:

    let insert_stubb = sinon.stub(db, 'run')
        .callsArgOn(2, {lastID: 'testVal'})
    

    这是一个包含一些组合函数的示例:

    let db ={
      run(sql, params, cb){cb()}
    }
    
    let insert = async(request) => {
      let sql, params
      return new Promise((resolve, reject) => {
          db.run(sql, params, function(err) {
              if (err)
                  reject(err)
              else
                  resolve(this.lastID)
          })
      })
    }
    
    
    let insert_stubb = sinon.stub(db, 'run')
                .callsArgOn(2,{lastID: 'testVal'})
    
    // should log our test value
    insert()
    .then(console.log)
    .catch((e) =>console.log("error", "error: ", e))
    <script src="https://cdnjs.cloudflare.com/ajax/libs/sinon.js/7.1.1/sinon.min.js"></script>

    【讨论】:

    • 谢谢!很有帮助。我尝试传入 lastID 的值,但我使用的是 .callsArgWith 函数,这更有意义。
    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2020-07-23
    • 2018-05-05
    • 2017-05-04
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多