দাবি করা, প্রত্যাশা করা এবং চাইয়ের মধ্যে পার্থক্য কী?


159

মধ্যে পার্থক্য কি assert, expectএবং should, এবং যখন কি ব্যবহার করতে হয়?

assert.equal(3, '3', '== coerces values to strings');

var foo = 'bar';

expect(foo).to.equal('bar');

foo.should.equal('bar');

উত্তর:


288

পার্থক্যগুলি সেখানে নথিভুক্ত করা হয়

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

  1. জোর দেওয়া এবং প্রত্যাশা ইন্টারফেস পরিবর্তন করে না Object.prototype, যেখানে করা উচিত। সুতরাং এগুলি এমন পরিবেশে আরও ভাল পছন্দ যেখানে আপনি পরিবর্তন করতে চান না বা চান না Object.prototype

  2. দৃsert়তা এবং প্রত্যাশা ইন্টারফেসগুলি প্রায় সর্বত্র কাস্টম বার্তাগুলিকে সমর্থন করে। এই ক্ষেত্রে:

    assert.isTrue(foo, "foo should be true");
    expect(foo, "foo should be true").to.be.true;

    "Foo সত্য হওয়া উচিত" বার্তাটি যদি ব্যর্থতা ব্যর্থ হয় তবে ব্যর্থতার সাথে একটি করে আউটপুট আসবে be আপনি উচিত ইন্টারফেস সঙ্গে একটি কাস্টম বার্তা সেট করার সুযোগ পাবেন না।

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

মনে রাখবেন assert.isTrue(foo), expect(foo).to.be.trueএবং foo.should.be.trueযদি আপনি কোনও কাস্টম বার্তা ব্যবহার না করেন এবং সমস্ত আউটপুট নিম্নলিখিত foo === 1:

    AssertionError: expected 1 to be true

সুতরাং যখন প্রত্যাশা এবং উচিত ইন্টারফেসটি পড়ার জন্য ভাল , এটির মত নয় যে একটি ইন্টারফেস অন্যটির তুলনায় স্বাভাবিকভাবে তথ্যপূর্ণ হয় যখন একটি দৃ when়তা ব্যর্থ হয়। এই বার্তাটি, যা তিনটি ইন্টারফেসের জন্য অভিন্ন, আপনাকে ঠিক কী পরীক্ষা করছিল তা আপনাকে জানায় না , কেবল যে মূল্যটি আপনি পেয়েছিলেন তা 1কিন্তু আপনি চেয়েছিলেন true। আপনি কী পরীক্ষা করছিলেন তা যদি জানতে চান তবে আপনাকে একটি বার্তা যুক্ত করতে হবে।


8
আপনি যেটি করতে পারেন তা নোট করুনexpect(foo).to.equal(true, "foo should be true");
user5325596

expectমোচার সর্বশেষ সংস্করণটি ব্যবহার করে আমি হাজির হওয়ার জন্য কোনও কাস্টম বার্তা পেতে পারি না
মিরকো

@ মিরকো মোচার সংস্করণটি এখানে সমালোচনামূলক নয়। আপনি সর্বশেষ চাটি ব্যবহার করছেন?
লুই

আমার জন্য একই, একটি ভ্যানিলা এক্সপ্রেসে (৪.১16.৩), মোচা (৫.১.১), চই (৪.১.২), চই-এইচপি (4.0.0) প্রকল্পে project কমান্ডটি mochaনিয়ে চালিত হয়ে এবং পরীক্ষা ব্যর্থ হওয়ার সাথে সাথে কাস্টম বার্তাটি কোথাও উপস্থিত হয় না ।
জুহা আনটিনেন

15

আমি আশা করি যে এই সাধারণ উদাহরণগুলি তাদের পার্থক্য পরিষ্কার করেছে

জাহির করা

var assert = require('chai').assert
, foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };

assert.typeOf(foo, 'string'); // without optional message
assert.typeOf(foo, 'string', 'foo is a string'); // with optional message
assert.equal(foo, 'bar', 'foo equal `bar`');
assert.lengthOf(foo, 3, 'foo`s value has a length of 3');
assert.lengthOf(beverages.tea, 3, 'beverages has 3 types of tea');

সমস্ত ক্ষেত্রে, আসর স্টাইল আপনাকে এ্যাসেট স্টেটমেন্টের শেষ প্যারামিটার হিসাবে একটি alচ্ছিক বার্তা অন্তর্ভুক্ত করতে দেয়। আপনার দৃser়তা পাস না করা হলে এগুলি ত্রুটি বার্তাগুলিতে অন্তর্ভুক্ত হবে।

নোট প্রত্যাশা এবং দৃ and়তা নির্ধারণের জন্য শৃঙ্খলাবদ্ধ ভাষা ব্যবহার করা উচিত, তবে তারা প্রাথমিকভাবে দৃser়ভাবে নির্ধারিতভাবে নির্মাণের পদ্ধতিতে পৃথক। প্রয়োজনের ক্ষেত্রে, ক্যাভেটগুলি কাটিয়ে উঠতে কিছু ক্যাভ্যাট এবং অতিরিক্ত সরঞ্জাম রয়েছে।

আশা করা

var expect = require('chai').expect
, foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3);
expect(beverages).to.have.property('tea').with.lengthOf(3);

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

var answer = 43;

// AssertionError: expected 43 to equal 42.
expect(answer).to.equal(42);

// AssertionError: topic [answer]: expected 43 to equal 42.
expect(answer, 'topic [answer]').to.equal(42);

বুলিয়ান বা সংখ্যাগুলির মতো নন-স্ক্রিপ্ট বিষয়গুলি ব্যবহার করার সময় এটি কার্যকর হয়।

উচিত

উচিত শৈলীটি প্রত্যাশিত ইন্টারফেসের মতো একই চেইনেবল জোরের জন্য অনুমতি দেয়, তবে এটি প্রতিটি শৃঙ্খলাটিকে আপনার শৃঙ্খলা শুরু করার জন্য একটি প্রচ্ছদ সম্পত্তি দিয়ে প্রসারিত করে। ইন্টারনেট এক্সপ্লোরার ব্যবহার করার সময় এই স্টাইলটিতে কিছু সমস্যা রয়েছে, তাই ব্রাউজারের সামঞ্জস্যতা সম্পর্কে সচেতন হন।

var should = require('chai').should() //actually call the function
, foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };

foo.should.be.a('string');
foo.should.equal('bar');
foo.should.have.lengthOf(3);
beverages.should.have.property('tea').with.lengthOf(3);

প্রত্যাশা এবং উচিত মধ্যে পার্থক্য

প্রথমত, লক্ষ্য করুন যে প্রত্যাশার প্রয়োজনীয়তাটি কেবল প্রত্যাশা ফাংশনের একটি রেফারেন্স, যেখানে প্রয়োজনের সাথে ফাংশনটি সম্পাদন করা হচ্ছে।

var chai = require('chai')
, expect = chai.expect
, should = chai.should();

আশা ইন্টারফেস আপনার ভাষা গবেষকেরা chaining জন্য একটি আদ্যস্থল হিসাবে একটি ফাংশন প্রদান করে। এটি node.js এবং সমস্ত ব্রাউজারে কাজ করে।

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

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