2013-07-12 1 views
2

Я использую Mocha и должен для тестирования простых запросов к базе данных, я пытаюсь запустить тесты Async для простых функций схемы Moongose, но каждый раз я получаю таймаут превышенную ошибку.превышение таймаута превысило ошибку в тестах Async Mocha

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" } 
}, 

Мой Get Функция

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"); 
     } 
    }); 
} 

I Ev ru также создала новую отдельную функцию для запроса, но она все еще не работает. любые идеи, которые функционируют, выглядят так.

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 и только потом, а затем в зависимости от обратного вызова следующего вы можете создать соответствующий ответ.

+0

Я использовал req, res и next, потому что эта функция вызывается в результате запроса app.get к URL-адресу. 'app.get ('/ api/facility /: clientId', db.getFacilites);' –

+0

@SulemanMirza Затем вам нужно протестировать его как обработчик маршрута, передав (возможно, макет) 'Request',' Response' и 'функция (ERR)'. Или рефакторинг, чтобы у вас было 2 функции - 1) для запроса, 2) для обработчика маршрута - поэтому первый (запрос) может использоваться в тесте, как он, кажется, ожидает. –

+0

Спасибо, что помогли Джонатану, теперь я попробовал с отдельной функцией для запроса, но он все еще не работает. Все еще время ожидания превысило ошибку. –