`এর আগে ()` এবং `এর আগে (প্রতিটি)) এর মধ্যে পার্থক্য কী?


90

বিশেষত মোচাbefore() এবং এর মধ্যে পার্থক্য কী beforeEach()? (জন্য একই প্রশ্ন after()এবং afterEach()।)

আমি ধরে নিয়েছি before()প্রতি describe()ব্লক প্রতি একবার রান , এবং beforeEach()পরীক্ষায় প্রতি একবার ( it()ব্লক) রান করে । এটা কি সত্যি?

এবং আমি কখন অন্যটির উপরে ব্যবহার করতে পছন্দ করব?

উত্তর:


188

before()সামনে একবার চালানো হয় সব একটি পরীক্ষা describe
after()   একবার চালানো হয় পরে সব একটি পরীক্ষা describe
beforeEach()সামনে চালানো হয় প্রতিটি একটি পরীক্ষা describe
afterEach()   পর চালানো হয় প্রতিটি একটি পরীক্ষাdescribe

আপনি কোনটি ব্যবহার করতে চান তা আপনার আসল পরীক্ষার উপর নির্ভর করে।

এখন, দীর্ঘ ব্যাখ্যা জন্য। আপনি যদি mocha -R minএটি চালিয়ে যান:

describe("top", function () {
    before(function () {
        console.log("top before");
    });
    after(function () {
        console.log("top after");
    });
    beforeEach(function () {
        console.log("top beforeEach");
    });
    afterEach(function () {
        console.log("top afterEach");
    });
    it("test1", function () {
        console.log("top test1");
    });
    describe("sublevel", function() {
        before(function () {
            console.log("sublevel before");
        });
        after(function () {
            console.log("sublevel after");
        });
        beforeEach(function () {
            console.log("sublevel beforeEach");
        });
        afterEach(function () {
            console.log("sublevel afterEach");
        });
        it("test1", function () {
            console.log("sublevel test1");
        });
        it("test2", function () {
            console.log("sublevel test2");
        });
    });
    it("test2", function () {
        console.log("top test2");
    });
});

আপনি এরকম কিছু দেখতে পাবেন (আমি প্রাসঙ্গিক নয় এমন আউটপুট বাদ দিয়েছি):

top before
top beforeEach
top test1
top afterEach
top beforeEach
top test2
top afterEach
sublevel before
top beforeEach
sublevel beforeEach
sublevel test1
sublevel afterEach
top afterEach
top beforeEach
sublevel beforeEach
sublevel test2
sublevel afterEach
top afterEach
sublevel after
top after

জিনিস যে আপনি যদি কি আগে ও sublevel এ পরীক্ষার প্রতিটি পর executes তাকান বিস্ময়কর হতে পারে যে হয় উভয়beforeEach শীর্ষ স্তরে এবং sublevel এ callbacks বলা হয়। একই জিনিস afterEach

কিছু ক্রম বিস্মিত হয় sublevel before, top beforeEach, sublevel beforeEach। তারা মনে করে যে একটি বাইরের সুযোগ সব আঙ্গুলসমূহ, একটি ভিতরের সুযোগ সব আঙ্গুলসমূহ সামনে চালানো উচিত যাতে তারা ক্রম আশা: top beforeEach, sublevel before, sublevel beforeEach। যাইহোক, মোচা হুকগুলি যে ক্রম সম্পাদন করে beforeসেটিকে পুরো অর্থে বোঝায়: হুক বলতে বোঝানো হয় একদল পরীক্ষার জন্য মঞ্চ নির্ধারণ করা, যেখানে beforeEachপ্রতিটি পরীক্ষা প্রতিটি পৃথক পরীক্ষার জন্য। একজাতীয় উৎকৃষ্ট কফি একটি পরীক্ষা executes, তখন সব beforeএবং beforeEachআঙ্গুলসমূহ যে সেট হয়েছিল describeযে এটা রয়েছে, এবং যে সব পূর্বপুরুষদের describeপরীক্ষা প্রযোজ্য হবে। মোচা প্রতিটি beforeহুক বহির্মুখী ক্ষেত্র beforeEachথেকে আন্তঃস্থ পর্যন্ত এবং সমস্ত হুক বহির্মুখী ক্ষেত্র থেকে আন্তঃতম পর্যন্ত সঞ্চালন করবে। যাহোক, beforeপ্রয়োগ করা সমস্ত হুকগুলি কোনও beforeEachহুকের আগেই কার্যকর করা হয় । এটি উপরের sublevel beforeক্রমটি ব্যাখ্যা করে: আগে সম্পাদন করে top beforeEachকারণ এটি beforeহুক। এবং সঙ্গে afterএবং afterEachএকই লজিক প্রযোজ্য কিন্তু অর্ডার বিপরীত হয়: সব afterEachআঙ্গুলসমূহ প্রযোজ্য কোনো আগে মৃত্যুদন্ড কার্যকর করা হয় afterহুক।

এছাড়াও লক্ষ্য করুন যে শীর্ষ স্তরের কলটির itতুলনায় আমি কীভাবে আমার কলগুলি অর্ডার করেছি সে সম্পর্কে মোচাকে কিছু আসে যায় না । এটি কার্যকর করে , এবং তারপরে সাবলেভেল টেস্টগুলি, যদিও আমি যে আদেশ দিয়েছিলাম তা ছিল , তারপরে সাবলেভেল পরীক্ষা এবং তারপরে ।describedescribetop test1top test2top test1top test2

কি তোমাদের মধ্যে ব্যবহার করতে চান before, beforeEachইত্যাদি সত্যিই আপনার পরীক্ষার সুনির্দিষ্ট উপর নির্ভর করে। সেটআপ করার জন্য একটি উপহাস বস্তু বা ডাটা স্ট্রাকচার প্রয়োজন এবং এই বস্তু বা কাঠামো যদি পারেন একটি একক সমস্ত পরীক্ষার দ্বারা পুনঃব্যবহার করা describe, আপনি ব্যবহার করতে পারেন beforeএটি সেট আপ করতে এবং afterএটি চূর্ণ করা। আপনি যদি কাঠামোর উপর কেবল পঠন পরীক্ষা করে থাকেন তবে এটি হতে পারে। যদি আপনার সমস্ত পরীক্ষাগুলি কেবল এটি পড়ে, তবে এটি বারবার তৈরি করার দরকার নেই। আপনার প্রতিটি পরীক্ষার যদি কাঠামোর describeএকটি নতুন অনুলিপি প্রয়োজন হয় কারণ প্রতিটি পরীক্ষায় কাঠামোটি পরিবর্তন করা হচ্ছে তবে আপনার beforeEachপ্রতিটি পরীক্ষার জন্য নতুন কাঠামো তৈরি করতে ব্যবহার করা উচিত এবং তারপরেafterEachআপনার যদি এটি পরিষ্কারভাবে ছিঁড়ে ফেলার দরকার হয়। এটি করা পরীক্ষার বিচ্ছিন্নতা নিশ্চিত করে: প্রতিটি পরীক্ষা একটি পরিচিত রাষ্ট্র থেকে শুরু হয় এবং সাফল্যের জন্য পূর্ববর্তী পরীক্ষার উপস্থিতি বা অনুপস্থিতির উপর নির্ভর করে না।


4
দুর্দান্ত, আপনাকে ধন্যবাদ। আমার প্রশ্নটি কী এবং কী কারণে হয়েছে, এই নখ উভয়ই বিশেষত পড়ার / লেখার পার্থক্য।
এরিকোসো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.