2017-10-27 19 views
0

私はbeforeフックが非同期になるように見えません。Mocha Before Hook非同期に動作しない

私はbeforeフックを使用して起動しましたが、失敗したときにピックアップしようとしているため、テストするサーバーがないためブロック全体をスキップ/スキップできますと)。

コード内で[async] beforeフックを使用しましたが、この場合はdoneが発生するのを待っていません。

基本的に、MochaJSテストがたくさんあり、1ブロックでWebサーバーを起動して、RESTful APIをテストするためのリクエストを作成する必要があります。私はそれが正常に開始したことを確認したいので、非同期メソッド。

describe('RESTful Tests', function(){ 
    // Start up the whole express server for these API tests 
    before(function(done) { 
     try { 
      server.on('error', (e) => { 
       console.error("HERE"); 
       done(); 
      }); 

      listener = server.listen(port, function() { 
       console.log("Server Started"); 
       done(); 
      }); 
      console.error("AFTER LISTEN"); 

     } catch(err) { 
      console.error("ON Caught"); 
      done(); 
     } 
     console.error("At End!!"); 
    }); 

これが実行され、テストに1) "before all" hookとして示したが、それが呼び出されるdoneを待ちません。私は他の項目の

RESTful Tests 
AFTER LISTEN 
At End!! 
    1) "before all" hook 

どれも現れていないが、私はEADDRINUSEについて(Iポートをブロックしたと予想される)例外を取得します...出力を取得しています。私はこれをキャッチする方法を見つけるのに本当に苦労しています。

私はそれが別の(ある種の)「スレッド」にあることを理解していますので、エラーは表示されませんが、まだ... 非同期doneメソッドは従わないのですか?

答えて

0

serverオブジェクトに.on('error'方法を置くためにノード/ ExpressJSのドキュメント状態

...少し誤解があるからドキュメントのいくつかのようです。この場合、それはlistenerオブジェクトにある必要がありました!

だから私の最後の[作業]のコードは次のようになります...

listener = server.listen(port, function() { 
    done(); 
}).on('error', (function(e) { 
    this.skip(e.code); 
    done(); 
}).bind(this)); 

イェーイ! :)

関連する問題