لدي شيء بسيط مثل هذا.
`it (" should call trust "، async (done) => {
const testPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Hello World!");
}, 200);
});
const result = await testPromise;
done();
} `
ولكن ما زلت أتلقى الخطأ "خطأ: طريقة الحل مفرطة التحديد. حدد رد اتصال أو أرجع وعدًا ؛ وليس كليهما.".
إذا أخرجت () ، فستنتهي مهلة الاختبار.
tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"target": "ES6",
"noImplicitAny": false,
"types": ["node", "mocha","supertest"],
"typeRoots": [
"./node_modules/@types"
]
}
}
موكا
--require ts-node/register
--reporter dot
--watch-extensions tsx,ts
test/**/*.ts
وجد جميل كيفية إصلاحه ، وإزالته في معلمة الوظيفة وفي الأسفل ويعمل. بمجرد أن تضع المهمة في معلمة الوظيفة ، فإنها تصبح سالكة
ضع في اعتبارك أيضًا أن وظائف async
تعيد الوعد تلقائيًا.
يبدو ما دمت async
، وكما قال ScottFreeCode ، فإنه يعيد الوعد ، لذلك 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)
}
}
});
التعليق الأكثر فائدة
وجد جميل كيفية إصلاحه ، وإزالته في معلمة الوظيفة وفي الأسفل ويعمل. بمجرد أن تضع المهمة في معلمة الوظيفة ، فإنها تصبح سالكة