2016-11-26 4 views
1

は、だから私はこの小さな機能私はそれがいずれかの理由を知って失敗するテストを実行したときユニットテスト、Sinon jsのスパイ

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) 
    }) 
}) 

このメソッドをテストするためにsinonを使用して

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

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

とイムを持っていますか?

AssertError: expected save to be called once but was called 0 times

答えて

1

エラーメッセージは、私はあなたが実際にあなたがいると思う方法をスタブしていないので、これが起こっている理由があると信じています。テストコードでは、実際のソースコードがこのオブジェクトのメソッドを呼び出すように、偽のDatabaseオブジェクトを作成することを意図していました。あなたがスタブアウトする必要があるのは、ソースコードが使用する実際のDatabaseオブジェクトです。

通常、ソースコードではDatabaseオブジェクトをインポートします。同じDatabaseオブジェクトをインポートし、テストコードでスタブアウトする必要があります。

関連する問題