【问题标题】:unit test, Sinon js spies单元测试,Sinon js 间谍
【发布时间】:2016-11-26 16:23:31
【问题描述】:

所以我有这个小功能

module.exports = {
  setupNewUser(info, callback) {
    var user = {
      name: info.name,
      nameLowercase: info.name.toLowerCase()
    }

    try {
      Database.save(user, callback)
    }
    catch(err) {
      callback(err)
    }
  }
}

我用 sinon 来测试这个方法

const setupNewUser = require('./index').setupNewUser
const sinon = require('sinon')
const assert = require('assert')

const Database = {
  save(info, cb) {
    if (info === undefined) {
      return cb('nope')
    } else {
      return cb()
    }
  }
}

describe('#save()', function () {
  it('should call save once', function() {
    var save = sinon.spy(Database, 'save')

    setupNewUser({ name: 'test' }, function() { })

    save.restore()
    sinon.assert.calledOnce(save)
  })
})

当我运行测试时它失败了,知道为什么吗?

错误信息

AssertError: 预期保存被调用一次但被调用了 0 次

【问题讨论】:

    标签: javascript unit-testing mocha.js sinon


    【解决方案1】:

    我相信发生这种情况的原因是因为您实际上并没有消除您认为的方法。在您的测试代码中,您的意图是创建一个假的 Database 对象,以便您的实际源代码将调用此对象的方法。您需要删除的是您的源代码使用的实际 Database 对象。

    通常在您的源代码中,您可能会导入Database 对象。您还需要导入相同的 Database 对象并将其存根到您的测试代码中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 2017-04-04
      • 2017-02-06
      • 2018-05-30
      • 2018-12-29
      • 2017-12-20
      • 2017-06-13
      相关资源
      最近更新 更多