Търся да стимулирам поведението чрез интеграционни тестове на Express.js междинен софтуер. Срещнах интересно обстоятелство, при което поведението на Express зад приложението не е предвидимо (не и от мен, във всеки случай).
Като опростен пример:
var middlewareExample = function(req, res, next){
if(req.session){
refreshSession(req.session, function(err, data){
if(!err){
res.redirect('/error');
}
});
next();
}else{
res.redirect('/authenticate');
}
};
Проблемът е извикването на next
след пренасочването, тъй като то живее извън вътрешната функция и условното условие. Не съм сигурен как Express обработва извикванията на мидълуер/маршрут до next
или res.redirect
, ако те се случват преди или след един друг, както се вижда по-горе.
Ръчното тестване не разкри никакво странно поведение, нито модулът за супертест. Бих искал да знам дали и как Express реагира на обстоятелства като това. Освен това може да се използва супертест за разкриване на всяко потенциално нежелано поведение. Освен това, ако мога, бих искал да чуя какви подходи биха използвали другите за тестване на междинния софтуер на Node/Express като цяло.
res.redirect('/error')
, така иnext()
могат да бъдат извикани в една и съща заявка, обърквайки целия контролен поток. - person Jonathan Ong   schedule 14.03.2013Can't set headers after they are sent
грешки, ако опитам да използвам и двете. - person robertklep   schedule 14.03.2013response
, като например пренасочване, ще се случи, преди да се обработи останалият междинен софтуер. Създадох фиктивна мидълуер функция, която изпълняваres.send(200)
и я поставих след този пример за мидълуер. Когато се изпълнява на живо, принуждава отговорът да бъде завършен, преди пренасочването да може да се обработи. При тестовете обаче пренасочването все още е по-бързо. Сега трябва да внеса забавяне в теста, за да докажа състоянието на състезанието. - person jneander   schedule 14.03.2013