2016-06-24 5 views
1

以下のMocha/Chainスタートアップブロックでテストすると、コードは期待どおりに待機しません。代わりに、ログは作成の開始を報告し、テストからログをとり(含まれていない)、インデックスの作成が完了したことを報告します。ElasticSearch JavaScript Promises

プロミスが却下されるか拒絶されるまで、各ブロックの前にモカが出てはならないのですか?

私は何が欠けていますか?

module.exports.prototype.setup = function (term) { 
    this.logger.info("Re-creating the index '%s'", $index); 
    return this.client.indices.delete({ 
     index: $index, 
     ignore: [404] 
    }).then((err, resp, respcode) => { 
     this.logger.info("Creating index '%s'", $index); 
     return this.client.indices.create({ 
      index: $index, 
      body: this.schemaBody 
     }); 
    }); 
}; 
+3

約束はブロックされていません。それらは同期していない非同期です。 –

答えて

1

約束をテストするには、async testを書く必要があります。

it("should do something", (done) => { 
    setup("stuff").then((index) => { 
     /* test index */ 
     done(); 
    }); 
}); 

また、テストからの約束を返すことができますし、それを解決するためにモカをお待ちしております。

it("should do something",() => { 
    return setup("stuff").then((index) => { 
     /* test index */ 
    }); 
}); 
0

このコードをMocha/Chaiテストからどのように呼び出すのですか?それはbeforeEachにありますか? Mocha Documentationから、次のいずれかを行うことができます。

// [Option A] return a promise 
beforeEach(() => { 
    return setup("foo"); 
}); 

// [Option B]: add a `done` parameter, and call it when you are done 
beforeEach((done) => { 
    return setup("foo").then(() => { 
    done(); 
    }); 
}); 
+0

私はそれがもっと徹底的にチェックしていないことに驚いていることを、私は忘れています。長い間、コードを見て、私はそれを見ることができなかった、ありがとう! – LeeGee

+1

はい、それは忘れるのがとても簡単です...何回も自分でやりました!最初のケース(オプションA)でのリターンが必要です。 2番目のケースでの返品はオプションでなければなりません(オプションB)。 –

+0

@LeeGeeこれは、あなたが正しい答えを選んで、多分いくつかのupvotesを手渡すときの部分です;) –

関連する問題