2016-11-26 80 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對象,並將其存儲在測試代碼中。