Promise を返す関数があります。合格するために特定のエラーメッセージで拒否する必要があるテストを作成したいと思います。
私が何を意味するかを示すために、いくつかのサンプルテストを作成しました:
import test from 'ava';
const returnsPromise = () => Promise.reject(new Error('foo'));
const awaitsPromise = async () => {
await Promise.reject(new Error('foo'));
};
test('for comparison, t.throws works with this syntax (this passes)', async t => {
const error = await t.throws(Promise.reject(new Error('foo')));
t.is(error.message, 'foo');
});
test('throws works with functions that return promises (this fails)', async t => {
const error = await t.throws(returnsPromise);
t.is(error.message, 'foo');
});
test('throws works with async functions that await promises (this fails)', async t => {
const error = await t.throws(awaitsPromise);
t.is(error.message, 'foo');
});
参考までに、最初のテストのコードは次の GitHub コメントからコピーされています: https://github.com/avajs/ava/issues/1120#issuecomment-261783315
ava --verbose
(version ) で実行すると0.17.0
、次の出力が得られます。
❯ ava --verbose test/promise.js
√ for comparison, t.throws works with this syntax (this passes)
× throws works with functions that return promises (this fails) Missing expected exception..
× throws works with async functions that await promises (this fails) Missing expected exception..
Unhandled Rejection: test\promise.js
Error: foo
returnsPromise (test/promise.js:3:45)
_tryBlock (node_modules/core-assert/index.js:311:5)
_throws (node_modules/core-assert/index.js:330:12)
Function.assert.throws (node_modules/core-assert/index.js:360:3)
Test.<anonymous> (test/promise.js:15:25)
Test.__dirname [as fn] (test/promise.js:14:1)
Unhandled Rejection: test\promise.js
Error: foo
test/promise.js:6:24
awaitsPromise (test/promise.js:5:7)
_tryBlock (node_modules/core-assert/index.js:311:5)
_throws (node_modules/core-assert/index.js:330:12)
Function.assert.throws (node_modules/core-assert/index.js:360:3)
Test.<anonymous> (test/promise.js:20:25)
Test.__dirname [as fn] (test/promise.js:19:1)
2 tests failed [16:55:55]
2 unhandled rejections
1. throws works with functions that return promises (this fails)
AssertionError: Missing expected exception..
Test.<anonymous> (test/promise.js:15:25)
Test.__dirname [as fn] (test/promise.js:14:1)
2. throws works with async functions that await promises (this fails)
AssertionError: Missing expected exception..
Test.<anonymous> (test/promise.js:20:25)
Test.__dirname [as fn] (test/promise.js:19:1)
ご覧のとおり、最初のテストは成功しますが、他の 2 つのテストは失敗します。
Promise を返す関数のエラー メッセージをテストするために t.throws を使用するにはどうすればよいですか?