2016-11-26 64 views
1

所以我要单元测试,JS兴农间谍

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

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

和IM使用兴农,以测试这种方法

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: expected save to be called once but was called 0 times

回答

1

我认为发生这种情况的原因是因为你没有真正删空,你以为你是方法。在您的测试代码中,您的意图是创建一个伪造的Database对象,以便您的实际源代码将调用此对象的方法。你需要去掉的是你的源代码使用的实际Database对象。

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