4

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 ミドルウェア全般をテストするために他の人がどのようなアプローチを使用するかを聞きたいです。

4

2 に答える 2

6

同じリクエストで 2 つのレスポンスを送信しています。next()次のハンドラーにも応答があると仮定すると、 は応答であり、 も同様ですres.redirect()。あなたが本当に欲しいのは:

var middlewareExample = function(req, res, next){
  if(req.session){
    refreshSession(req.session, next);
  }else{
    res.redirect('/authenticate');
  }
};
于 2013-03-15T07:03:52.900 に答える