Я хочу управлять поведением с помощью интеграционных тестов на промежуточном программном обеспечении 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