私は以下のメソッドを持っています: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)
})
これは動作します。ありがとう、トン! – musicliftsme
嬉しいことですが、_it_は役に立ちました。mochaに関するあなたの質問にすべてお答えします:) – alexmac