2017-08-25 3 views
1

私は以下のメソッドを持っています:removeOldObjects私はユニットテストしたいです。既存のオブジェクトのリストからオブジェクトを削除します。私はオブジェクトがmongooseのインスタンスだと思う。私は方法が何をしているのか理解しており、return existinObj.remove(cb)remove()メソッドを含む入力を模擬しようとしています。実際のremove()のドキュメントはhttp://mongoosejs.com/docs/api.htmlです(モデル#remove([fn])セクション)。約束を返すことになっているようです。async.each()コールを続けるためにこれを模擬する方法

return existinObj.remove(cb)async.each()コールを最終コールバックに移動するにはreturn cb(null)を実行する方法を、またプロミスはこの方法をどのように完了させるべきかを理解するのは難しいです。私はプロミスを使って遊んでいましたが、どこにも行きませんでした(最近はちょうどJavascript/Nodeをピックアップしました)

removeMethodを以下のスクリプトセクションで定義してこのメ​​ソッドを正しくテストして到達させる必要があります最終的なコールバック?

方法:

const _ = require('underscore') 
... 
removeOldObjects (keepObjects, existingObjects, callback) { 
    let objectsToReturn = [] 

    async.each(existingObjects, function (existinObj, cb) { 
    let foundObj = _.find(keepObjects, function (thisObj) { 
     return existinObj.id == thisObj.id 
    }) 

    if (foundObj) {   
     objectsToReturn.push(object) 
     return cb(null) 
    } else { 
     // Would like below to in effect behve like "return cb(null)", 
     // so it can reach the final callback at the end 
     return existinObj.remove(cb) 
    } 
    }, function (err) { 
    return callback(err, objectsToReturn) 
    }) 
} 

(モカを使用して)テストスクリプト:コールバックがない場合

const test = new MyClass() 
const keepObjects = [{id: 5}] // removeDeadCams() does not hit its final callback 
// const keepObjects = [{id: 1}] // removeDeadCams() runs its full course 
const existingObjects = [ 
    {id: 1, remove: removeMethod} 
] 
test.removeOldObjects(keepObjects, existingObjects, function (err, res) { 
    console.log('error-----') 
    console.log(err) 
    console.log('response-----') 
    console.log(res) 
}) 

答えて

1

マングース文書remove方法は、だけにして約束を返します。 removeOldObjects実装で提供されています。ですから、これに代えて約束を返すべきではありません、あなたが提供するコールバックを呼び出す必要があります:

は各existingObjects項目にremove機能を追加し、ここからのコールバックを呼び出します。

const test = new MyClass() 

const oldObjects = [ 
    { id: 5 } 
]; 
const existingObjects = [ 
    { id: 1, remove: cb => cb(1) } // call it with id of the item to validate in your test 
]; 

test.removeOldObjects(oldObjects, existingObjects, function(err, res) { 
    console.log(res); // outputs [null, 1] 
}) 
+0

これは動作します。ありがとう、トン! – musicliftsme

+1

嬉しいことですが、_it_は役に立ちました。mochaに関するあなたの質問にすべてお答えします:) – alexmac

関連する問題