2016-04-12 11 views
1

私はシンプルな非同期モカテストを行っていますが、done()コールバックが呼び出されることはありません。TypeScriptとmochaでの非同期/待機テスト

describe("RiBot", function() { 
    it("should start with a random topic", async (done) => { 
    await RiBot.init(); 
    let topic = RiBot.getTopic("testuser") 
    assert.equal(topic, "FAILHERE"); 
    done() 
    }) 
}) 

この場合、アサーションは失敗するはずですが、代わりに私はタイムアウトを取得します。

RiBot 
    RibotTest topic +0ms undefined 
    1) should start with a random topic 


    0 passing (2s) 
    1 failing 

    1) RiBot should start with a random topic: 
    Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test. 

編集:私はアサートと同じように、標準的なJSのコードを実行する場合:

async function testRiBot() { 
    try { 
    await RiBot.init() 
    let topic = RiBot.getTopic("testuser") 
    debug('topic', topic) 
    assert.equal(topic, "FAILHERE", 'fail match on topic'); 
    } catch(err) { 
    debug("err", err, err.stack) 
    } 
} 

を私はエラーとしてスローされた例外を取得しません。

RibotTest err +2ms { [AssertionError: fail match on topic] 
    name: 'AssertionError', 
    actual: 'undefined', 
    expected: 'FAILHERE', 
    operator: '==', 
    message: 'fail match on topic', 
    generatedMessage: false } AssertionError: fail match on topic 
    at /Users/dc/dev/rikai/boteditor/test/RiBot_test.js:19:20 
    at next (native) 
    at fulfilled (/Users/dc/dev/rikai/boteditor/test/RiBot_test.js:4:58) 
    at process._tickCallback (node.js:412:9) 

誰かがtypescript async/awaitとmochaを使用して簡単な例を提供できますか?

+0

あなたはこれを@dcsanで把握しましたか? – timothyclifford

答えて

6

テストは約束を返すならば、モカフレームワークはに約束を探します注

it('should start with a random topic', async function() { 
    // ... 
}); 

...このようなあなたのテストを定義してみます(同時にあなたの行わ呼び出しを削除)完了コールバックではなく、解決または拒否されます。非同期関数は常にPromiseを返します。

また、それはそうでなければ、(つまり、あなたのテストコード内this.titleを呼び出すようなことを行うことはできません)テストから正しいthisコンテキストにアクセスすることはできませんテストを定義するには、矢印の機能を使用して回避するためのベストプラクティスです。

関連する問題