2017-06-13 11 views
0

testdouble.jsでテストすると、node.jsモジュールの内部機能td.replaceは可能ですか?内部関数をtestdouble.jsに置き換えますか?

内部関数はDB呼び出しで構成されているため、テストしたくありません。しかし、私はこの関数が期待されるパラメータを受け取ったことをテストしたい。正しいのparamsを取得永続かどうかをチェック

module.exports = { record: recordEvent } 

recordEvent = (event) => 
    var dbModel = map(event); 
    persist(dbModel); 

var map = (event) => 
    // some code that transforms event to the db specific representation (testable) 

var persist = (model) => 
    // some SQL insert/update code here (not testable) 

そして次の試験:Node.jsのモジュール所与例えば

、テストがエラーをスローしかし

recorder = require('event_recorder') 
describe 'Event recorder module', -> 
    it 'converts the event to a db model', -> 

     var event = {...// mock event }; 
     var model = {...// mock model of the event }; 

     var persist = td.replace(recorder, 'persist') 
     td.when(persist(model)).thenReturn(true) 

     result = recorder.record(event) 
     expected = true; 

     result.should.be.equal(expected) 

td.replace - No "persist" property was found

なぜこのエラーが発生するのですか?persistメソッドが公開されていないためです。 testdoubleでこれをどのように達成できますか?

答えて

1

1つのオプションは、わかりやりのとおり、persistメソッドを公開することです。

var executeQuery = td.function() 

recorder.recordEvent(event, executeQuery) 

td.verify(executeQuery('UPDATE ...')) 
:別のオプションは、受け入れるか、またはSQLクエリを実行するために別の関数を利用して、代わり その機能をスタブにし persistのためになります
関連する問題