() এর পূর্বে () পূর্বে মোচায় অ্যাসিঙ্ক ফাংশনটি সমাপ্ত হয়?


89

আমার একটি কলব্যাক ফাংশন রয়েছে before()যা ডাটাবেস পরিষ্কার করার জন্য। before()গ্যারান্টে থাকা কি সবকিছু শেষ হওয়ার আগেই শেষ করা যায় it()?

before(function(){
   db.collection('user').remove({}, function(res){}); // is it guaranteed to finish before it()? 
});

it('test spec', function(done){
  // do the test
});

after(function(){
});

4
এই কাজ করা উচিত. আপনার beforeহ্যান্ডলারের কাছ থেকে কোনও প্রতিশ্রুতি ফিরে এসেছে তা নিশ্চিত করা দরকার । উদাহরণস্বরূপbefore(function () { return db.collection...}
ব্রুফো

উত্তর:


127

নতুন মোচা সংস্করণের জন্য:

আপনি এখন মোচায় একটি প্রতিশ্রুতি ফিরিয়ে দিতে পারেন, এবং মোচা এগিয়ে যাওয়ার আগে এটি শেষ হওয়ার জন্য অপেক্ষা করবে। উদাহরণস্বরূপ, নিম্নলিখিত পরীক্ষা পাস করবে:

let a = 0;
before(() => {
  return new Promise((resolve) => {
    setTimeout(() => {
      a = 1;
      resolve();
    }, 200);
  });
});
it('a should be set to 1', () => {
  assert(a === 1);
});

আপনি এখানে ডকুমেন্টেশন খুঁজে পেতে পারেন

পুরানো মোচা সংস্করণের জন্য:

যদি আপনি চান যে সমস্ত কিছু হওয়ার আগে আপনার অ্যাসিঙ্ক্রোনাস অনুরোধটি সম্পূর্ণ হয়ে যায়, আপনাকে doneঅনুরোধ করার আগে আপনার প্যারামিটারটি ব্যবহার করতে হবে এবং কলব্যাকে এটি কল করতে হবে।

মোচা তারপরে doneনিম্নলিখিত ব্লকগুলির প্রক্রিয়া শুরু করার জন্য অপেক্ষা করা হবে wait

before(function (done) {
   db.collection('user').remove({}, function (res) { done(); }); // It is now guaranteed to finish before 'it' starts.
})

it('test spec', function (done) {
  // execute test
});

after(function() {});

আপনার সতর্কতা অবলম্বন করা উচিত, ইউনিট পরীক্ষার জন্য ডাটাবেস স্ট্যাবিং না করা কার্যকরভাবে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে।

আরও তথ্যের জন্য, মোচা ডকুমেন্টেশন দেখুন


মনে রাখবেন যদি অ্যাসিঙ্ক্রোনাস অপারেশন অত্যন্ত দীর্ঘ সময় লাগে, আপনি যে খুব সহায়ক নয় একটি ব্যর্থতা বার্তা পাবেন: stackoverflow.com/a/48087201/1827734
BrDaHa

মোচা এখন হুকস - mochajs.org/# ওয়ার্কিং - সহ - প্রস্তাবিত প্রতিশ্রুতিগুলিকে সমর্থন করে । ব্যবহার করার দরকার নেই done। শুধু একটি প্রতিশ্রুতি ফিরে।
ব্রুফা 21

আপনি এটিও করতে পারেন: before(function () { return db.collection('user').remove({}); })যেহেতু remove()কোনও প্রতিশ্রুতি new Promise()
ফেরায়,

7

আশা করি আপনার db.colલેક્શન () এর একটি প্রতিশ্রুতি ফিরিয়ে দেওয়া উচিত। যদি হ্যাঁ হয় তবে এর আগে আপনি অ্যাসিঙ্ক কীওয়ার্ডটিও ব্যবহার করতে পারেন ()

// Note: I am using Mocha 5.2.0.
before(async function(){
   await db.collection('user').remove({}, function(res){}); // it is now guaranteed to finish before it()
});

4
কীভাবে after()? awaitআমি যখন এটিকে কল করি তখন এটি আমার কাজ ঠিক করে দেয় before()(এটি একটি ডিবি এন্ট্রি মুছে দেয়), তবে আমি যদি ঠিক একই জিনিসটি রেখে দিই, তবে after()এটি দ্বিতীয় describe()...it()সক্রিয় হওয়ার পরে কোনও কিছু মুছবে না এবং ডেটা অপসারণ না হওয়ার কারণে ব্যর্থ হয়।
জুহা আনটিনেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.