2013-07-12 105 views
2

我正在使用摩卡,並應該測試簡單的數據庫查詢,我試圖運行簡單的Moongose模式函數的異步測試,但我每次都獲得超時超時錯誤。超時錯誤在異步摩卡測試

Error: timeout of 15000ms exceeded 
    at null.<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:165:14) 
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15) 

我甚至用this.timeout(15000)並且還試圖--timeout 15000在摩卡命令,但沒有成功的,什麼都超時時間,我給我收到此錯誤。只有同步測試正在通過。以下是我想測試的測試和功能。

我的摩卡測試: -

describe('#getFacility()', function() { 
    this.timeout(15000); 
    it('should get facility successfully', function (done) { 
     db.getFacilites(Data.testFacility, function (err, facilities) { 
      if (err) throw err; 
      facilities.Name.should.equal(Data.testFacility.body.Name); 
      done(); 
     }) 
    }); 
}); 

我的數據: -

testFacility : { 
    params: { clientId:"51c85c3267b6fc1553000001" } 
}, 

我獲取函數

getFacilites: function (req, res) { 
    Facility.find({Client: req.params.clientId}, function (err, facilities) { 
     if(err) { 
      res.send(500,err); 
     } else if (!facilities) { 
      res.send(404, "facilities not found"); 

     } else if (req.query.format && req.query.format === 'select') { 
      var result = facilities.map (function (f) { 
       return { value: f._id.toString(), text: f.Name } 
      }); 
      res.json(result); 

     } else { 
      console.log("Cannot Retrieve Facilities"); 
     } 
    }); 
} 

我EV en也爲查詢創建了一個新的單獨函數,但它仍然不起作用。任何想法,功能看起來像這樣。

describe('#getFacility() direct from DB', function() { 
    it('should get facility successfully from db', function (done) { 
     Client_data.Facility.find({Client: Data.testFacility.params.clientId}, function(err, facilities) { 
      if (err) throw (err); 
      if (facilities) { 
       facilities.forEach(function (f) { 
        console.log(f); 
       }); 
       done(); 
      } 
     }); 
    }); 
}); 

如果我嘗試調用完成()回調查詢後,測試通過,但是這也並不好看 給我。

describe('#addFacility()', function() { 
    it('should add facility successfully', function (done) { 
     API_Calls.addFacility(Data.testFacility, function (doc) { 
      doc.Name.should.equal(Data.testFacility.body.Name); 
     }); 
     done(); 
    }); 
}); 

回答

2

你getFacilities走的是一條REQ,水庫旁邊和你傳遞它的東西在您的測試完全不同(一個testFacility對象和回調)。

我認爲你的getFacilities方法定義不應該採取req,res和next,也許一個clientId和next,然後根據下一個回調你可以創建適當的響應。

+0

我使用的是req,res和next,因爲這個函數是作爲app.get請求到一個URL的結果而調用的。 'app.get('/ api/facility /:clientId',db.getFacilites);' –

+0

@SulemanMirza然後你需要測試它作爲一個路由處理程序,傳遞一個(可能是模擬)'Request','Response'和'函數(ERR)'。或重構,所以你有2個功能 - 1)查詢,2)路由處理程序 - 所以第1(查詢)可以在測試中使用,因爲它似乎期待。 –

+0

感謝您的幫助喬納森,現在我嘗試用單獨的查詢功能,但它仍然無法正常工作。仍然超時錯誤超時。 –