34

assert.throws非同期関数がネイティブassertモジュールからusing をスローするかどうかを確認したい。で試しました

const test = async () => await aPromise();
assert.throws(test); // AssertionError: Missing expected exception..

Promise が解決される前に関数が終了するため、(明らかに?) 機能しません。それでも、コールバックを使用して同じことが達成されるこの質問を見つけました。

なにか提案を?

(私は Babel を使用して Node.js ネイティブ ジェネレーターにトランスパイルしています。)

4

5 に答える 5

46

ノード 10 以降

Node.js v10.0 以降、assert.rejectsまさにそれを行うものがあります。

古いバージョンのノード

async関数は決してスローしません。拒否される可能性のある promise を返します。

一緒に使用することはできませんassert.throws独自の非同期アサーションを記述する必要があります

async function assertThrowsAsynchronously(test, error) {
    try {
        await test();
    } catch(e) {
        if (!error || e instanceof error)
            return "everything is fine";
    }
    throw new AssertionError("Missing rejection" + (error ? " with "+error.name : ""));
}

そしてそれを次のように使用します

return assertThrowsAsynchronously(aPromise);

非同期テスト ケースで。

于 2016-03-03T20:49:17.920 に答える