2016-06-25 7 views
0

私はmongodbにドキュメントを挿入(そして検索)するための単体テストを書こうとしています。しかし、私はタイムアウトエラーが発生し続けており、それはdoneが呼び出されないことを示唆しています。 (のmongodが実行されている、と私は、オブジェクトがにconsole.logを使用して、検索されるだけでなく、うまく挿入されて見ることができます。)mongoose、mocha、およびchaiを使用してmongodbにオブジェクトを挿入および取得するためのユニットテストを書く方法は?

私が使用しているもの:

のNode.js、 ES6、 をマングース、 モカは、 チャイ

CheckbookEntryは私が約束で作業してみましょういくつかのマングースの呼び出しに奇妙なラッパーです。

describe('create and getOneById',() => { 
    it('creates a new checkbookEntry, and retrieves it from the db', (done) => { 
     var EXAMPLE_ENTRY = { 
      type: 'debit', 
      date: Date(), 
      description: 'Example of a cb entry', 
      account: 'PNC', 
      amount: 239.33 
     }; 

     CheckbookEntry.create(EXAMPLE_ENTRY.type, 
           EXAMPLE_ENTRY.date, 
           EXAMPLE_ENTRY.description, 
           EXAMPLE_ENTRY.account, 
           EXAMPLE_ENTRY.amount) 
         .then(function(createdEntry){ 
          return CheckbookEntry.getOneById(createdEntry._id); 
         }) 
         .then(function(foundEntry){ 
          expect(foundEntry).to.eql(EXAMPLE_ENTRY); 
          done(); 
         }, function(err){ 
          assert.fail(err); 
          done(); 
         }); 
    }).timeout(5000); 

}); // end describe create 

これを取得する方法についてのご意見はありますか?

答えて

1

私は推測することができますが、私はこの問題は、このによって引き起こされることができることを考える:

.then(function(foundEntry){ 
    expect(foundEntry).to.eql(EXAMPLE_ENTRY); 
    done(); 
}, function(err){ 
    assert.fail(err); 
    done(); 
}); 

具体的には、約束の連鎖を続けることなく成就/拒否ハンドラでアサーションを使用しました。

アサーションが例外をスローすると、done()は決して呼び出されません。また、どの約束の実装が使用されているかに応じて、例外について通知されることさえありません。また、onFulFilledハンドラでスローされた例外は、同じ.then()メソッドに渡されたonRejectedハンドラをトリガしません。

代わりdoneコールバックを使用してのモカsupports promises out of the boxは、あなたの約束のチェーンを返すので:

return CheckbookEntry.create(...) 
        .then(...) 
        .then(..., ...); 

そのように、例外がそれを処理するモカ、に戻って伝播されます。

FWIW、Mongoose also supports promises out of the box

関連する問題