প্রোগ্রামে কীভাবে মোচায় একটি পরীক্ষা এড়ানো যায়?


142

আমার একটি কোড রয়েছে যেখানে নির্দিষ্ট পরীক্ষাগুলি সিআই পরিবেশে সর্বদা ব্যর্থ হয়। আমি পরিবেশের অবস্থার ভিত্তিতে এগুলি অক্ষম করতে চাই।

রানটাইম কার্যকর করার সময় কীভাবে প্রোগ্রামে মোচায় একটি পরীক্ষা এড়ানো যায়?


3
প্রোগ্রামগতভাবে একটি পরীক্ষা এড়িয়ে যাওয়া mochajs.org/#inclusive-tests এবং নীচে @ zatziky এর উত্তর দ্বারা কভার করা this.skip()হয়েছে । বাকি উত্তরগুলি মোচা ভি 3 + এর জন্য অপ্রচলিত
প্যাট্রিক

1
বিবরণ.স্কিপ ('বিবরণ', () => {}) / বর্ণনা.only ('বিবরণ', () => {}) / it.skip ('বিবরণ', () => {}) / এটি। কেবলমাত্র ('বিবরণ', () => {})
জুন 711

কোন গৃহীত উত্তর?
পল রুনি

উত্তর:


168

আপনি বর্ণনার সামনে একটি এক্স রেখে বা এটি ব্লক করে বা তার .skipপরে কিছু রেখে টেপগুলি এড়িয়ে যেতে পারেন ।

xit('should work', function (done) {});

describe.skip('features', function() {});

আপনি পরীক্ষাটিতে একটি করে একক পরীক্ষা চালাতে পারেন .only। এই ক্ষেত্রে

describe('feature 1', function() {});
describe.only('feature 2', function() {});
describe('feature 3', function() {});

এক্ষেত্রে কেবল বৈশিষ্ট্য 2 ব্লক চলবে।

প্রোগ্রামিয়ালি টেস্টগুলি এড়িয়ে যাওয়ার কোনও উপায় বলে মনে হচ্ছে না, তবে আপনি beforeEachবিবৃতিতে কিছু পরীক্ষা করতে পারেন এবং পতাকাটি সেট করা থাকলে কেবল পরীক্ষা চালাতে পারেন।

beforeEach(function(){
    if (wrongEnvironment){
        runTest = false
    }
}

describe('feature', function(){
    if(runTest){
         it('should work', function(){
            // Test would not run or show up if runTest was false,
         }
    }
}

8
কোনও সমাধানে আপনার দ্বিতীয় প্রচেষ্টা কাজ করবে না, কারণ মৃত্যুদন্ডের আদেশটি আপনি ভাবেন না। beforeEachকলটি কার্যকর হলে , মোচা ভবিষ্যতের ব্যবহারের জন্য বেনামে ফাংশন ("হুক") রেকর্ড করে , যখন কলটি কার্যকর করে, মোচা তাৎক্ষণিকভাবে এটিতে প্রেরিত বেনাম ফাংশনটি সম্পাদন করে। সুতরাং সময় কার্যকর করা হয়, হুক চালানো হবে না। describeif (runTest)beforeEach
লুই

22
এই উত্তরের 27 টি আপগেট কীভাবে থাকবে? প্রোগ্রামটিমেটিকভাবে পরীক্ষাগুলি এড়িয়ে যাওয়া সম্পর্কে প্রশ্ন জিজ্ঞাসা করে, তাই ".স্কিপ" বা "। एकमात्र" যুক্ত করা সহায়ক নয়। তারপরে এটি স্পষ্টতই বলেছে যে ওপি যা করতে চায় তা আপনি করতে পারবেন না, অন্য উত্তরগুলি আপনাকে কীভাবে এটি করতে হবে তা সত্ত্বেও।
গ্রীম পেরো

3
কাজ করবে না, প্রশ্নের উত্তর নয়, পরিবর্তে
@ গজাসের

1
এই উত্তরের একটি আলাদা প্রশ্নের জন্য যোগ্যতা রয়েছে যা এখানে জিজ্ঞাসা করা হয়নি। আমার এখানে কিছু পরিবর্তন করার ক্ষমতা নেই। এই.স্কিপ () উত্তর দেখুন।
অ্যান্ড্রু মার্টিনেজ

3
এটি প্রশ্নের উত্তর দেয় না
ইনগো রেনার

110

প্রোগ্রামমেটিকভাবে স্কিপিংয়ে টেস্টের একটি অনথিভুক্ত উপায় রয়েছে:

// test.js

describe('foo', function() {
  before(function() {
    this.skip();
  });

  it('foo', function() {
    // will not run
    console.log('This will not be printed');
  });
});

চলমান:

$ mocha test.js


  foo
    - foo


  0 passing (9ms)
  1 pending

এটি https://github.com/mochajs/mocha/issues/1901 এ আলোচনা করা হয়েছে ।


13
পাঠকরা এটি জানতে চাইলে এটি পুরোপুরি describeস্কিপড হিসাবে চিহ্নিত করে (যেমন সমস্ত পরীক্ষাগুলি describeবাদ দেওয়া হয়)।
লুই

মোচার "মুলতুবি পরীক্ষা" নথি: mochajs.org/#pendendestetes
lasec0203

বিবরণ.স্কিপ ('বিবরণ', () => {}) / বর্ণনা.only ('বিবরণ', () => {}) / it.skip ('বিবরণ', () => {}) / এটি। কেবলমাত্র ('বিবরণ', () => {})
জুন 711

আমি কেন এই ধরণের উত্তর উপকারিত হয় তা বুঝতে পারি না। এটি হ্যাক - এবং কোনও প্রাইটি নয়।
চেনপ

2
প্রকৃত নথিপত্র mochajs.org/# অন্তর্ভুক্ত- সত্য , এটি কোনওভাবেই হ্যাক বিটিডব্লিউ নয় , রানটাইম সেটিংসের উপর ভিত্তি করে কিছু পরীক্ষা বাদ দেওয়ার সঠিক পদ্ধতি। অর্থাৎ এটি আসল প্রশ্নটি জিজ্ঞাসা করেছিল ঠিক ঠিক উত্তর দেয়। ধন্যবাদ @ এক্সাভিডিড
ওয়াওপ্রেস.হোস্ট

41

এই উত্তরটি ES6 এর জন্য কাজ করে

পরিবর্তে:

describe('your describe block', () => {

তুমি চাও:

(condition ? describe : describe.skip)('your describe block', () => {

শর্তসাপেক্ষে বর্ণনামূলক ব্লকের সমস্ত পরীক্ষা এড়িয়ে যায় যদি শর্তটি মিথ্যা থাকে is

বা এর পরিবর্তে:

it('your it block', () => {

তুমি চাও:

(condition ? it : it.skip)('your it block', () => {

শর্তসাপেক্ষে একটি পরীক্ষা এড়িয়ে যায় যদি শর্তটি মিথ্যা।


4
আপনি যা পরামর্শ দিচ্ছেন তা আমি পেয়েছি তবে আপনাকে প্রথমে এরকম প্রাসঙ্গিক বর্ণনা বর্ণনা const contextualDescribe = shouldAvoidTests ? describe.skip : describe করতে হবে : তারপরে আপনি এটি ব্যবহার করতে পারেন: contextualDescribe('your it block', () => {
Ser

3
@ সের একটি একক লাইনে যেতে, আমি এরকম কিছু ব্যবহার করেছি:(condition ? describe : describe.skip)('your describe block', () => {
জোশডেন

কিভাবে এই async করবেন? আমাকে রেডিস ফ্ল্যাগের উপর ভিত্তি করে স্কিপ শর্তটি সন্ধান করতে হবে, এটি একটি অ্যাসিঙ্ক অপারেশন (আমরা রেডিসে বৈশিষ্ট্যযুক্ত পতাকাগুলি সঞ্চয় করি)।
প্যাট্রিক ফিনিগান

কিছুক্ষণ হলেও আইভিরও আগে এই ধরণের প্রয়োজন ছিল, আমি মনে করি যে আমি কেবল একটি ফাংশনগুলিতে সমস্ত মোচা জিনিস
জড়িয়ে

আমি এই কৌশলটি ব্যবহার করতাম তবে এখন এটি আমার জন্য ব্যর্থ। সহজভাবে লেখার চেষ্টা করুন(it)('my test', () => {})
cyrf

33

আপনি যেমন বর্ণনা করছেন তেমন দৃশ্যের জন্য আমি মোচা থেকে রানটাইম স্কিপিং ব্যবহার করি। এটি ডক্স থেকে অনুলিপি পেষ্ট :

it('should only test in the correct environment', function() {
  if (/* check test environment */) return this.skip();

  // make assertions
});

আপনি দেখতে পাচ্ছেন, এটি পরিবেশের উপর ভিত্তি করে পরীক্ষা এড়িয়ে যায়। আমার নিজের অবস্থা if(process.env.NODE_ENV === 'continuous-integration')


2
একমত! সম্ভবত প্রথম দিকে ফিরে এক লাইনার হতে পারে? লাইক: if (/* skipTestCondition */) return this.skip();- সম্পাদনা: কাজগুলি: ডি
সিডোএফসি

12

পরীক্ষা এড়ানো, ব্যবহার describe.skipবাit.skip

describe('Array', function() {
  it.skip('#indexOf', function() {
    // ...
  });
});

আপনি ব্যবহার করতে পারেন পরীক্ষা অন্তর্ভুক্ত করতে describe.onlyবাit.only


describe('Array', function() {
  it.only('#indexOf', function() {
    // ...
  });
});

Https://mochajs.org/#inclusive-tests এ আরও তথ্য


6

এটি নির্ভর করে আপনি কীভাবে প্রোগ্রামটিমেটিকভাবে পরীক্ষা এড়িয়ে যেতে চান। যদি কোনও টেস্ট কোড চালানোর আগে যদি এড়িয়ে যাওয়ার শর্তগুলি নির্ধারণ করা যায়, তবে আপনি কেবল শর্তের উপর ভিত্তি করে কল করতে পারেন itবা it.skipপ্রয়োজন হিসাবে কল করতে পারেন । উদাহরণস্বরূপ, পরিবেশের ভেরিয়েবলটি ONEকোনও মানকে সেট করা থাকলে এটি কিছু পরীক্ষা এড়িয়ে যাবে :

var conditions = {
    "condition one": process.env["ONE"] !== undefined
    // There could be more conditions in this table...
};

describe("conditions that can be determined ahead of time", function () {
    function skip_if(condition, name, callback) {
        var fn = conditions[condition] ? it.skip: it;
        fn(name, callback);
    };

    skip_if("condition one", "test one", function () {
        throw new Error("skipped!");
    });

    // async.
    skip_if("condition one", "test one (async)", function (done) {
        throw new Error("skipped!");
    });

    skip_if("condition two", "test two", function () {
        console.log("test two!");
    });

});

আপনি যে শর্তগুলি পরীক্ষা করতে চান তা যদি পরীক্ষার সময় নির্ধারণ করা যায় তবে এটি কিছুটা জটিল। আপনি যদি পরীক্ষার এপিআইয়ের অংশটি কঠোরভাবে না বলে কিছু অ্যাক্সেস করতে না চান তবে আপনি এটি করতে পারেন:

describe("conditions that can be determined at test time", function () {
    var conditions = {};
    function skip_if(condition, name, callback) {
        if (callback.length) {
            it(name, function (done) {
                if (conditions[condition])
                    done();
                else
                    callback(done);
            });
        }
        else {
            it(name, function () {
                if (conditions[condition])
                    return;
                callback();
            });
        }
    };

    before(function () {
        conditions["condition one"] = true;
    });

    skip_if("condition one", "test one", function () {
        throw new Error("skipped!");
    });

    // async.
    skip_if("condition one", "test one (async)", function (done) {
        throw new Error("skipped!");
    });

    skip_if("condition two", "test two", function () {
        console.log("test two!");
    });

});

আমার প্রথম উদাহরণটি টেস্টগুলিকে আনুষ্ঠানিকভাবে এড়িয়ে যাওয়া (ওরফে "মুলতুবি") হিসাবে চিহ্নিত করছিল, আমি যে পদ্ধতিটি সবে দেখিয়েছি তা কেবল আসল পরীক্ষা করা এড়াতে পারবে তবে পরীক্ষাগুলি আনুষ্ঠানিকভাবে এড়িয়ে যাওয়া হিসাবে চিহ্নিত হবে না। তারা পাস হিসাবে চিহ্নিত করা হবে। আপনি যদি এগুলিকে এড়িয়ে চলাতে চান তবে আমি পরীক্ষার এপিআইয়ের অংশটি সঠিকভাবে বলছেন না এমন অংশগুলিতে অ্যাক্সেসের কোন উপায়ই কম জানি না:

describe("conditions that can be determined at test time", function () {
    var condition_to_test = {}; // A map from condition names to tests.
    function skip_if(condition, name, callback) {
        var test = it(name, callback);
        if (!condition_to_test[condition])
            condition_to_test[condition] = [];
        condition_to_test[condition].push(test);
    };

    before(function () {
        condition_to_test["condition one"].forEach(function (test) {
            test.pending = true; // Skip the test by marking it pending!
        });
    });

    skip_if("condition one", "test one", function () {
        throw new Error("skipped!");
    });

    // async.
    skip_if("condition one", "test one (async)", function (done) {
        throw new Error("skipped!");
    });

    skip_if("condition two", "test two", function () {
        console.log("test two!");
    });

});

3

এটি "প্রোগ্রামেটিক স্কিপিং" হিসাবে যোগ্যতা অর্জন করে কিনা তা আমি নিশ্চিত নই, তবে আমাদের সিআই পরিবেশের জন্য কয়েকটি নির্দিষ্ট পরীক্ষামূলকভাবে বাছাই করতে আমি মোচার ট্যাগিং বৈশিষ্ট্যটি ব্যবহার করি ( https://github.com/mochajs/mocha/wiki/Tagging )। ইন describe()বা it()বার্তাগুলি, আপনি @ নো-সিআইয়ের মতো একটি ট্যাগ যুক্ত করতে পারেন। এই পরীক্ষাগুলি বাদ দিতে, আপনি আপনার প্যাকেজ.জসনে একটি নির্দিষ্ট "সিআই লক্ষ্য" সংজ্ঞায়িত করতে পারেন এবং ব্যবহার --grepএবং --invertপ্যারামিটারের মতো:

"scripts": {
  "test": "mocha",
  "test-ci" : "mocha --reporter mocha-junit-reporter --grep @no-ci --invert"
}

এটি পরীক্ষা এড়ানোর অন্যতম উপায়। একটি ছোট উদাহরণ সত্যিই দরকারী হবে। তবে আমি অবশ্যই স্বীকার করি যে আপনি যে লিঙ্কটি ভাগ করেছেন তার শুরুতেই একটি উদাহরণ রয়েছে। @ মার্টিন
কৃষ্ণ

2

আপনি আমার প্যাকেজ ব্যবহার করতে পারেন প্রোগ্রামগুলি পরীক্ষামূলকভাবে এড়াতে আপনি মোচা-ধরে নিতে পারেন তবে কেবল পরীক্ষার বাইরে থেকে। আপনি এটি এর মতো ব্যবহার করুন:

assuming(myAssumption).it("does someting nice", () => {});

মোচা-অনুমান কেবল তখনই আপনার পরীক্ষা চালাবে myAssumption হয় true, অন্যথায় এটা লাফালাফি করা হবে (ব্যবহার it.skipএকটা চমৎকার বার্তা সহ)।

আরও বিশদ উদাহরণ এখানে:

describe("My Unit", () => {
    /* ...Tests that verify someAssuption is always true... */

    describe("when [someAssumption] holds...", () => {
        let someAssumption;

        beforeAll(() => {
            someAssumption = /* ...calculate assumption... */
        });

        assuming(someAssumption).it("Does something cool", () => {
            /* ...test something cool... */
        });
    });
});

এটিকে ব্যবহার করে, আপনি ক্যাসকেডিং ব্যর্থতা এড়াতে পারবেন। পরীক্ষা বলুন"Does something cool" সর্বদা ব্যর্থ হয় যখন কিছু অ্যাসেম্পশন না রাখে - তবে এই ধারণাটি ইতিমধ্যে উপরে (ইন Tests that verify someAssuption is always true") পরীক্ষা করা হয়েছিল ।

সুতরাং পরীক্ষার ব্যর্থতা আপনাকে কোনও নতুন তথ্য দেয় না। প্রকৃতপক্ষে, এটি এমনকি একটি মিথ্যা-ইতিবাচকও: পরীক্ষাটি ব্যর্থ হয় নি কারণ "শীতল কিছু" কাজ করে না, তবে পরীক্ষার পূর্বশর্তটি সন্তুষ্ট না হওয়ায়। আপনার সাথে mocha-assumeপ্রায়শই এই জাতীয় মিথ্যা ধনাত্মকতা এড়ানো যায়।


এটি সত্যিই দুর্দান্ত, দু: খজনক যে প্রকল্পটি পরিত্যক্ত বলে মনে হচ্ছে ...
ভিক্টর শ্র্রেডার

@ ভিক্টরশ্রেডার ভাল, আমার মনে হয়েছিল যে কেউ এটি ব্যবহার করছে না। আমি সময় পেলে পরের কয়েক সপ্তাহের মধ্যে এটির উন্নতি করতে পারে। আপনি কি গিথুব এ একটি সমস্যা খুলতে পারেন এবং আমাকে বলতে চান আপনি কি দেখতে চান?
ডেভিড তানজার

আমি এটি এখনও ব্যবহার করছি না, @ ডেভিড তানজার, আমি আপনার ধারণাটি সত্যিই দুর্দান্ত দেখতে পেয়েছি । আমি নিজেকে পরীক্ষার প্রস্তুতি এবং শর্তসাপেক্ষে বেশ কিছু এড়িয়ে চলেছি এবং এই ধরণের ইন্টারফেসটি অনেক বেশি পঠনযোগ্য। আমার এখনও এটি চেষ্টা করে দেখতে হবে, তবে আমি ধারণা করি যে অনুমান হিসাবে অ্যাসিঙ্ক ফাংশনগুলিকে কয়েকটি অনুমান এবং সমর্থন করতে সক্ষম হওয়াই দুর্দান্ত হবে। সম্ভবত এই সমস্ত ইতিমধ্যে সমর্থিত, আমি চেক না।
ভিক্টর শ্রড্ডার

1
যদিও এই উত্তরের দ্বিতীয় উদাহরণ সহ একটি সমস্যা রয়েছে। beforeAllহুক সমস্ত পরীক্ষার সংগ্রহ করা হয় সামনে চালানোর নিশ্চিত নয়। প্রকৃতপক্ষে, এটি কেবল পরে চালানোর খুব সম্ভবত সম্ভাবনা রয়েছে তবে এই ক্ষেত্রে assuming(someAssumption)ইতিমধ্যে প্রাথমিক (অপরিজ্ঞাত) মানটি পাওয়া যেত। কাঙ্ক্ষিত প্রভাব অর্জনের জন্য একটি অংশে এটি অংশ মোড়ানো প্রয়োজন w
ভিক্টর শ্রদ্ধা

2

শর্তসাপেক্ষে পরীক্ষা চালানোর জন্য আমরা একটি দুর্দান্ত পরিষ্কার র‌্যাপার ফাংশন লিখতে পারি:

function ifConditionIt(title, test) {
  // Define your condition here
  return condition ? it(title, test) : it.skip(title, test);
}

এটি আপনার পরীক্ষাগুলিতে নিম্নলিখিত হিসাবে প্রয়োজনীয় এবং ব্যবহার করা যেতে পারে:

ifConditionIt('Should be an awesome test', (done) => {
  // Test things
  done();
});

আমি মনে করি এটি এখানে উপস্থাপিত সবচেয়ে মার্জিত সমাধান। আরও জটিল যুক্তিযুক্ত কাজটি করার জন্য এটি সহজেই বাড়ানো যেতে পারে এবং এতে যুক্ত হওয়া বোনাস রয়েছে যা পরীক্ষাগুলি এইভাবে এড়ানো যায় তা পরীক্ষার রিপোর্টে এড়ানো হিসাবে চিহ্নিত করা হয়েছে
জোশুয়া ইভান্স

0

বলুন আমি আমার প্যারামিট্রাইজড পরীক্ষাটি বাদ দিতে চেয়েছিলাম যদি আমার পরীক্ষার বিবরণে "foo" স্ট্রিং থাকে তবে আমি এটি করতাম:

// Skip parametrized test if description contains the string "foo"
(test.description.indexOf("foo") === -1 ? it : it.skip)("should test something", function (done) {
    // Code here
});

// Parametrized tests
describe("testFoo", function () {
        test({
            description: "foo" // This will skip
        });
        test({
            description: "bar" // This will be tested
        });
});

আপনার ক্ষেত্রে, আমি বিশ্বাস করি যে আপনি যদি পরিবেশের ভেরিয়েবলগুলি পরীক্ষা করতে চান তবে আপনি নোডজেএস ব্যবহার করতে পারেন:

process.env.ENV_VARIABLE

উদাহরণস্বরূপ (সতর্কতা: আমি এই বিট কোডটি পরীক্ষা করি নি!), সম্ভবত এর মতো কিছু:

(process.env.NODE_ENV.indexOf("prod") === -1 ? it : it.skip)("should...", function(done) {
    // Code here
});

আপনি ENV_VARIABLE সেট করতে পারেন যেখানে আপনি যা চাচ্ছেন তা হতে পারে এবং সেই মানটি ব্যবহার করে পরীক্ষাটি এড়িয়ে যান বা চালান। (নোডজেএস'স প্রক্রিয়া.এনভির জন্য ডকুমেন্টেশন এফওয়াইআই এখানে রয়েছে: https://nodejs.org/api/process.html#process_process_env )

আমি এই সমাধানের প্রথম অংশের জন্য সম্পূর্ণ creditণ গ্রহণ করব না, আমি উত্তরটি খুঁজে পেয়েছি এবং এটি পরীক্ষা করেছি এবং এটি এই উত্সের মাধ্যমে একটি সাধারণ শর্তের ভিত্তিতে পরীক্ষা এড়ানোর জন্য নিখুঁতভাবে কাজ করেছে: https://github.com/mochajs/mocha/issues / 591

আশাকরি এটা সাহায্য করবে! :)


0

এটি সত্যই মোচার বৈশিষ্ট্যগুলি ব্যবহার করছে না, বরং আমার পছন্দসই আচরণ পেতে এটি টুইট করে।

আমি আমার প্রটেক্টর মোচা পরীক্ষায় পরবর্তী কোনও 'এটি' এড়িয়ে যেতে চেয়েছিলাম এবং একটি 'এটি' ব্যর্থ হয়েছে। এর কারণ এটি ছিল যে একবার ভ্রমণের পরীক্ষার এক ধাপ ব্যর্থ হয়ে যায় এটি প্রায় নিশ্চিত ছিল যে বাকী ব্যর্থ হবে, এবং তারা একটি ব্রাউজার ব্যবহার করে যদি কোনও পৃষ্ঠাতে উপাদান উপস্থিত হওয়ার জন্য অপেক্ষা করে থাকে তবে বিল্ড সার্ভারটি হোগ করতে পারে etc.

যখন কেবল স্ট্যান্ডার্ড মোচা পরীক্ষা চালাবেন (প্রটেক্টর নয়) এটি গ্লোবাল এর আগে এবং পরে প্রতিটি হুকের সাহায্যে পরীক্ষার পিতামাতার কাছে 'স্কিপসউসবিউসিড' পতাকা সংযুক্ত করে বর্ণনা করা যেতে পারে:

    beforeEach(function() {
      if(this.currentTest.parent.skipSubsequent) {
            this.skip();
      }
    }); 


    afterEach(function() {
      if (this.currentTest.state === 'failed') {
        this.currentTest.parent.skipSubsequent = 'true'
      }
    })

প্রটেক্টর এবং মোচা দিয়ে এটি চেষ্টা করার সময় এটি 'এর' এর পরিধি পরিবর্তন হয়ে গেছে এবং উপরের কোডটি কাজ করে না। আপনি 'ত্রুটি কলিং সম্পন্ন ()' এবং প্রোটেক্টর থামার মতো একটি ত্রুটি বার্তা দিয়ে শেষ করেন।

পরিবর্তে আমি নীচের কোড দিয়ে শেষ করেছি। সবচেয়ে সুন্দর নয়, তবে এটি এই.স্কিপ () দ্বারা অবশিষ্ট পরীক্ষা ফাংশনগুলির প্রয়োগের পরিবর্তে শেষ হয় rep এটি পরে কাজ করা বন্ধ করবে যদি / যখন পরে সংস্করণগুলির সাথে মোচার অভ্যন্তরীণ পরিবর্তন হয়।

এটি মোচার ইন্টার্নালগুলি ডিবাগ করে এবং পরীক্ষা করে কিছু পরীক্ষার এবং ত্রুটির মধ্য দিয়ে সনাক্ত করা হয়েছিল ... পরীক্ষাগুলি ব্যর্থ হলে ব্রাউজারের পরীক্ষা স্যুটগুলি যত তাড়াতাড়ি সম্পন্ন করতে সহায়তা করে।

beforeEach(function() {

    var parentSpec = this.currentTest.parent;

    if (!parentSpec.testcount) {
        parentSpec.testCount = parentSpec.tests.length;
        parentSpec.currentTestIndex = 0;
    } else {
        parentSpec.currentTestIndex = parentSpec.currentTestIndex + 1;
    }

    if (parentSpec.skipSubsequent) {

        parentSpec.skipSubsequent = false;
        var length = parentSpec.tests.length;
        var currentIndex = parentSpec.currentTestIndex;

        for (var i = currentIndex + 1; i < length; i++) {
            parentSpec.tests[i].fn = function() {
                this.skip();
            };
        }
    }
});


afterEach(function() {
    if (this.currentTest.state === 'failed') {
        this.currentTest.parent.skipSubsequent = 'true'
    }
});


-2

যেমন @ ড্যানিয়েলস্টজুলস এখানে উত্তর দিয়েছেন পরীক্ষা এড়ানোর একটি উপায় আছে। @ এই বিষয়ে কর্তৃপক্ষ github.com মোচাজ আলোচনা থেকে উত্তরটি অনুলিপি করেছেন, তবে এটি মোচা কোন সংস্করণে উপলব্ধ তা সম্পর্কে কোনও তথ্য নেই।

আমি আমার প্রকল্পে মোচা পরীক্ষার কার্যকারিতা সংহত করার জন্য গ্রান্ট-মোচা-পরীক্ষা মডিউলটি ব্যবহার করছি। শেষের (এখনের জন্য) সংস্করণে জাম্পিং - 0.12.7 আমার এই মোচা সংস্করণটি 2.4.5 এ নিয়ে এসিসিপ () প্রয়োগ করে নিয়ে আসে।

সুতরাং, আমার প্যাকেজ.জসনে

  "devDependencies": {
    "grunt-mocha-test": "^0.12.7",
    ...

এবং তারপর

npm install

এবং এটি আমাকে এই হুক দিয়ে খুশি করে:

describe('Feature', function() {

    before(function () {

        if (!Config.isFeaturePresent) {

            console.log('Feature not configured for that env, skipping...');
            this.skip();
        }
    });
...

    it('should return correct response on AB', function (done) {

        if (!Config.isABPresent) {

           return this.skip();
        }

        ...

-2

দয়া করে না। এমন একটি পরীক্ষা যা পরিবেশের জুড়ে ধারাবাহিকভাবে কাজ করে না তা আপনার বিল্ড অবকাঠামো দ্বারা স্বীকৃত হওয়া উচিত। এবং সিআই বিল্ডগুলির স্থানীয়ের তুলনায় বিভিন্ন ধরণের পরীক্ষা চালানো হলে এটি খুব বিতর্কিত হতে পারে।

এছাড়াও এটি পুনরাবৃত্তিযোগ্যতা স্ক্রু। সার্ভারে এবং স্থানীয়টিতে বিভিন্ন পরীক্ষা চালানো হলে আমি সিআই বা তদ্বিপরীত ডিভ মধ্যে ব্যর্থ এবং পরীক্ষায় অংশ নিতে পারি। কোনও জোর করে ফাংশন নেই এবং একটি ব্যর্থ বিল্ডটি দ্রুত এবং নির্ভুলভাবে সংশোধন করার আমার কাছে কোনও উপায় নেই।

শর্তসাপেক্ষে টেস্ট চালানোর পরিবর্তে আপনার যদি পরিবেশের মধ্যে পরীক্ষা বন্ধ করতে হয়, তবে আপনার পরীক্ষাগুলিতে ট্যাগ করুন এবং নির্দিষ্ট বিল্ড লক্ষ্যগুলিতে কাজ না করে এমন পরীক্ষাগুলি নির্মূল করতে একটি ফিল্টার ব্যবহার করুন। এইভাবে সবাই জানে যে কী চলছে এবং এটি তাদের প্রত্যাশাগুলি হতাশ করে। এটি প্রত্যেককে জানতে দেয় যে পরীক্ষার কাঠামোতে অসঙ্গতি রয়েছে এবং কারওর মধ্যে এমন একটি সমাধান থাকতে পারে যা সেগুলি আবার সঠিকভাবে চালিত হয়। আপনি যদি কেবল পরীক্ষার নিঃশব্দ হন তবে তারা হয়ত বুঝতে পারে না কোনও সমস্যা আছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.