私はこのような単純なものを持っています。
`it(" promiseを呼び出す必要があります "、async(done)=> {
const testPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Hello World!");
}, 200);
});
const result = await testPromise;
done();
} `
しかし、「エラー:解決メソッドが過剰に指定されています。コールバックを指定するか、Promiseを返します。両方ではありません。」というエラーが発生し続けます。
done()を取り出すと、テストがタイムアウトします。
tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"target": "ES6",
"noImplicitAny": false,
"types": ["node", "mocha","supertest"],
"typeRoots": [
"./node_modules/@types"
]
}
}
mocha.opts
--require ts-node/register
--reporter dot
--watch-extensions tsx,ts
test/**/*.ts
素敵なそれを修正する方法を見つけました関数パラメータと下部で行われた削除を削除し、それは動作します。 完了を関数パラメータに入れるとすぐに、それはヘイワイヤーになります
async
関数は自動的にpromiseを返すことにも注意してください。
async
である限り、 @ ScottFreeCodeが言ったように、promiseが返されるので、 done()
呼び出しをスキップします。 動作します。
完了した削除は私のために働いた!
前:
後(作品!!):
getResponse関数:
関数パラメーターからdone
を削除し、関数呼び出しのdone()
を削除する必要がありました
前
before(async function (done) {
user = new User({ ...});
await user.save();
done()
});
後
before(async function () {
user = new User({ ...});
await user.save();
});
これらは私のために働きます
私は同じ問題を抱えており、約束が失敗することをテストする必要があるため、ユーザーが行う必要があります。 だから私はそれをキャッチし、それから完了を呼び出しますが、このエラーが発生します。
it("...", async function (done) {
try {
await asyncFung(...);
done("The call should have failed")
} catch (error) {
if (error instanceof MyError) {
done()
} else {
done(error)
}
}
});
最も参考になるコメント
素敵なそれを修正する方法を見つけました関数パラメータと下部で行われた削除を削除し、それは動作します。 完了を関数パラメータに入れるとすぐに、それはヘイワイヤーになります