2013-08-20 59 views
0

我已經採取How do I get an asynchronous result back with node unit and mongoose?和非常輕微修改它更簡單,以顯示我的失敗。多個任務失敗

變種貓鼬=要求( '貓鼬');

var db; 

module.exports = { 
    setUp: function(callback) { 
     try { 
      //db.connection.on('open', function() { 
      mongoose.connection.on('open', function() { 
       console.log('Opened connection'); 
       callback(); 
      }); 

      db = mongoose.connect('mongodb://localhost/test_1'); 
      console.log('Started connection, waiting for it to open'); 
     } catch (err) { 
      console.log('Setting up failed:', err.message); 
      test.done(); 
      callback(err); 
     } 
    }, 

    tearDown: function(callback) { 
     console.log('In tearDown'); 
     try { 
      console.log('Closing connection'); 
      db.disconnect(); 
      callback(); 
     } catch (err) { 
      console.log('Tearing down failed:', err.message); 
      test.done(); 
      callback(err); 
     } 
    }, 

    test1: function(test) { 
     test.ifError(null); 
     test.done(); 
    }, 
    test2: function(test) { 
     test.ifError(null); 
     test.done(); 
    } 
}; 

當nodeunit運行此我得到如下:

stam2_test.js 
Started connection, waiting for it to open 
Opened connection 
In tearDown 
Closing connection 
✔ test1 
Started connection, waiting for it to open 
Opened connection 

FAILURES: Undone tests (or their setups/teardowns): 
- test2 

To fix this, make sure all tests call test.done() 

一些更多的信息: 如果在安裝/拆卸我不蒙戈用戶,但只是一個測試代碼,例如增加計數器,它一切正常。 如果我只有一個測試,一切正常。 添加另一個測試,並在設置mongo一致失敗,所以我想我在做的設置錯了。

預先感謝您。

回答

0

之所以失敗似乎在mongoose.connection.on('open',...)事件訂閱仍然結合從TEST1即使斷開後回調並重新連接TEST2。對以前回調的額外呼叫是造成麻煩的原因。

您應該確保以某種方式刪除訂閱,當你用它做。由於貓鼬連接基於EventEmitter的NodeJS然後一個簡單的解決方案可能與 mongoose.connection.once('open'...) 更換呼叫 mongoose.connection.on('open'...) 但你也可以使用一般的加/的removeListener()需要。

在不同的音符,似乎不需要在單元測試的每個測試的連接和斷開。你可以通過像連接到你的測試數據庫這樣的模塊連接一次,如require('db_connect_test'),模塊db_connect_test應該只是調用mongoose.connect(...),所有的測試都會使用相同的連接(或者與貓鼬創建的池一起運行)運行。

有一個好的!