টুবি (সত্য) বনাম টু বি ট্রুথি () বনাম টু বিট্রু ()


165

মধ্যে পার্থক্য কি expect(something).toBe(true), expect(something).toBeTruthy()এবং expect(something).toBeTrue()?

মনে রাখবেন যে toBeTrue()এটি পছন্দসইjasmine-matchers ম্যাচচার যা অন্য দরকারী এবং হ্যান্ডি ম্যাচচারগুলির মতো toHaveMethod()বা এর মধ্যে প্রবর্তিত toBeArrayOfStrings()


প্রশ্নটি জেনেরিক হতে বোঝানো হয়েছে, তবে, বাস্তব-বিশ্বের উদাহরণ হিসাবে, আমি পরীক্ষা করছি যে কোনও উপাদানটি প্রদর্শিত হয়েছে protractor। এই ক্ষেত্রে আমার কোন ম্যাচার ব্যবহার করা উচিত?

expect(elm.isDisplayed()).toBe(true);
expect(elm.isDisplayed()).toBeTruthy();
expect(elm.isDisplayed()).toBeTrue();

3
আমি মনে করি .toBe(true)== .toBeTrue()। ToBeTruthy () শুধুমাত্র সত্যের উপরই সত্য হতে পারে না , তবে 123 , "dfgdfg", [1,2,3], ইত্যাদিতে ... মূলত সত্য if(x==true), যদিও if(x===true)সত্য true
ডান্ডাভিস


2
এটি নির্ভর করে আপনি কী মান পরীক্ষা করছেন। ব্যবহার করুন toBeTruthyযদি আপনি টাইপ নিশ্চিত না এটা হিসাবে একই == trueসময় আমি সন্দেহ .toBe(true)হিসাবে একই === trueমাইন্ড আপনি তার ছ্যাকা সত্য জন্য পরীক্ষার করার জন্য একটি ফাংশন কল করতে। পরামর্শের শব্দ ,. জাভাস্ক্রিপ্টে ভুলে যান ==এবং !=বিদ্যমান এবং এটি আর কখনও ব্যবহার করবেন না। সত্যের দরকার নেই এবং নতুনদের জন্য একটি ফাঁদ। ব্যবহার করুন ===এবং !==পরিবর্তে।
ব্লাইন্ডম্যান 67

@ ব্লাইন্ডম্যান 67 পরামর্শের জন্য ধন্যবাদ, এটি সঠিক ধারণা দেয়। আমরা এমনকি আছে eslintযদি আমাদের প্রতিবেদন ==বা !=এটি পরিবর্তন করতে পরামর্শ ব্যবহার করা হয় ===এবং !==
অ্যালেক্সেক্স

উত্তর:


231

এখানে জিজ্ঞাসিত প্রশ্নের মতো কিছু যখন আমি অবাক করি তখন আমি কী করি উত্সটিতে যেতে।

Tobe ()

expect().toBe() হিসাবে সংজ্ঞায়িত করা হয়:

function toBe() {
  return {
    compare: function(actual, expected) {
      return {
        pass: actual === expected
      };
    }
  };
}

এটি তার পরীক্ষাটি সম্পাদন করে ===যার অর্থ এটি যখন ব্যবহৃত হয় তখন expect(foo).toBe(true)এটি কেবল তখনই পাস করবে যখন fooসত্যিকারের মান থাকে true। সত্যবাদী মানগুলি পরীক্ষায় উত্তীর্ণ হবে না।

toBeTruthy ()

expect().toBeTruthy() হিসাবে সংজ্ঞায়িত করা হয়:

function toBeTruthy() {
  return {
    compare: function(actual) {
      return {
        pass: !!actual
      };
    }
  };
}

জবরদস্তি টাইপ করুন

একটি মান সত্যবাদী যদি কোনও বুলিয়ানকে এই মানটির জোর করে মান দেয় true!!সত্যিকারের জন্য অপারেশন পরীক্ষাটি expectবুলিয়ানকে দেওয়া মানকে জোর করে tests লক্ষ্য করুন বিপরীতভাবে কি বর্তমানে গৃহীত উত্তর বোঝা , == trueহয় না truthiness জন্য একটি সঠিক পরীক্ষা। আপনি মজার জিনিস পাবেন

> "hello" == true
false
> "" == true
false
> [] == true
false
> [1, 2, 3] == true
false

যেখানে !!ফলন ব্যবহার করা হচ্ছে :

> !!"hello"
true
> !!""
false
> !![1, 2, 3]
true
> !![] 
true

(হ্যাঁ, খালি বা না, একটি অ্যারে সত্যই))

toBeTrue ()

expect().toBeTrue()জুঁই-ম্যাচচারসের অংশ (যা এনপিএম-এ jasmine-expectনিবন্ধিত পরবর্তী প্রকল্পের পরে নিবন্ধিত jasmine-matchers)।

expect().toBeTrue() হিসাবে সংজ্ঞায়িত করা হয়:

function toBeTrue(actual) {
  return actual === true ||
    is(actual, 'Boolean') &&
    actual.valueOf();
}

সঙ্গে পার্থক্য expect().toBeTrue()এবং expect().toBe(true)যে expect().toBeTrue()পরীক্ষার এটি একটি সঙ্গে তার আচরণ কিনা Booleanঅবজেক্ট। পাস হবে expect(new Boolean(true)).toBe(true)যেখানে ব্যর্থ expect(new Boolean(true)).toBeTrue()হবে। এটি এই মজার জিনিসটির কারণে:

> new Boolean(true) === true
false
> new Boolean(true) === false
false

কমপক্ষে এটি সত্য:

> !!new Boolean(true)
true

কোনটি ব্যবহারের জন্য সবচেয়ে উপযুক্ত elem.isDisplayed()?

শেষ পর্যন্ত প্রোটেক্টর সেলেনিয়ামকে এই অনুরোধটি সরিয়ে দেয়। ডকুমেন্টেশন যে দ্বারা উত্পাদিত মান .isDisplayed()একটি প্রতিশ্রুতি করে একটি থেকে সমাধান করা হয় boolean। আমি এটিকে ফেস ভ্যালুতে এবং ব্যবহার করতে .toBeTrue()বা নিতে চাই .toBe(true)। যদি আমি এমন কোনও মামলা খুঁজে পাই যেখানে বাস্তবায়ন সত্যবাদী / মিথ্যা মানগুলি ফিরিয়ে দেয় তবে আমি একটি বাগ রিপোর্ট দায়ের করব।


20

জাভাস্ক্রিপ্টে আছে সত্য এবং সত্য। কিছু সত্য হলে তা অবশ্যই সত্য বা মিথ্যা or কোনও কিছু সত্য হলে এটি বুলিয়ান হতে পারে বা নাও হতে পারে তবে "কাস্ট" মানটি বুলিয়ান।

উদাহরণ।

true == true; // (true) true
1 == true; // (true) truthy
"hello" == true;  // (true) truthy
[1, 2, 3] == true; // (true) truthy
[] == false; // (true) truthy
false == false; // (true) true
0 == false; // (true) truthy
"" == false; // (true) truthy
undefined == false; // (true) truthy
null == false; // (true) truthy

স্ট্রিং সেট আছে বা অ্যারের কোনও মান আছে কিনা তা আপনি যদি পরীক্ষা করতে চান তবে এটি বিষয়গুলিকে আরও সহজ করে তুলতে পারে।

var users = [];

if(users) {
  // this array is populated. do something with the array
}

var name = "";

if(!name) {
  // you forgot to enter your name!
}

এবং যেমন বলা হয়েছে। expect(something).toBe(true)এবং expect(something).toBeTrue()একই। তবে expect(something).toBeTruthy()সেগুলির কোনওটির মতো নয়।


2
[] == false;সঠিক নয়, বিবৃতি নিজেই মিথ্যা কারণ বস্তু সর্বদা সত্য
ডান্ডাভিস

@dandavis গুড ধরা
মীখা

পছন্দ করুন বিষয়গুলি সর্বদা সত্য নয়। তবে উক্তিটি [] == false;হ'লtrue
মাইকা

2
না, এটি কার্যকরী নয়, বাস্তবে একেবারে বিপরীত: এটি একটি নূব গোটচা ... বিবেচনা করুন [""]==falseবা [0]== false; খালি নয়, মিথ্যা নয়, কেবল
ধোঁকাবাজি

2
x == trueআপনার উদাহরণগুলিতে যেমন ব্যবহার করেছেন তা একটি বিভ্রান্তিমূলক এবং যেমন উপরের মন্তব্যগুলি দেখায়, জাভাস্ক্রিপ্টে সত্যতার ধারণাটি চিত্রিত করার জন্য ভুল উপায়। জাভাস্ক্রিপ্টে সত্যতার আসল পরীক্ষাটি হল কোনও মান কীভাবে একটি ifবিবৃতিতে বা বুলিয়ান এক্সপ্রেশনে অপারেন্ড হিসাবে আচরণ করে। আমরা জানি 1সত্যবাদী কারণ if (1)পরবর্তী বিবৃতিটি মূল্যায়নের কারণ হবে। অনুরূপভাবে []যদিও: একই কারণে truthy হয় [] == trueমূল্যায়ণ false, if ([])যাতে আমরা জানতে পারি এখনও পরবর্তী বিবৃতি কারণ হবে মূল্যায়ন করতে হবে, []truthy হয়।
জর্দান 3

13

দাবি অস্বীকারকারী : এটি কেবল একটি বন্য অনুমান

আমি জানি যে সবাই সহজেই পঠনযোগ্য লিস্ট পছন্দ করে:

  • toBe(<value>) - প্রত্যাবর্তিত মানটি সমান <value>
  • toBeTrue() - ফেরত মান হয় কিনা তা পরীক্ষা করে দেখুন true
  • toBeTruthy() - মানটি, যখন কোনও বুলিয়ানকে দেওয়া হয়, তা সত্যতার মান হবে কিনা তা পরীক্ষা করে দেখুন

    Truthy মান সব মান যে হয় 0, ''(খালি স্ট্রিং), false, null, NaN, undefinedবা [](খালি অ্যারে) *।

    * খেয়াল করুন যে আপনি যখন দৌড়াবেন তখন !![]এটি ফিরে আসে trueতবে আপনি যখন [] == falseএটি চালান তখনও ফিরে আসে true। এটি কীভাবে প্রয়োগ করা হয় তার উপর নির্ভর করে। অন্য কথায়:(!![]) === ([] == false)


আপনার উদাহরণে toBe(true)এবং toBeTrue()একই ফলাফল দেবে।


একটি খালি অ্যারে মিথ্যা।
মাইকা

@ মিকাহ উইলিয়ামসন ধন্যবাদ! উত্তর স্থির করে
ইসমাইল মিগুয়েল

3
খালি অ্যারে জাতীয় মধ্যে 100% truthy হয়alert(!![])
dandavis

[] == trueআপনার কনসোলে @ ডান্ডাভিস উত্পাদন করে false[] == falseআপনার কনসোল উত্পাদন করেtrue
মাইকা

@ মাইকাউইলিইমসন: এটি কারণ আপনি অ্যারের স্ট্রিং সংস্করণটি (খালি স্ট্রিং) সত্যের সাথে তুলনা করছেন। এটি বিভ্রান্তিকর হতে পারে ...
ডান্ডাভিস

1

সেখানে অনেকগুলি ভাল উত্তর রয়েছে, আমি কেবল একটি দৃশ্যাবলী যুক্ত করতে চেয়েছিলাম যেখানে এই প্রত্যাশাগুলির ব্যবহার সহায়ক হতে পারে। ব্যবহার করে element.all(xxx), যদি আমার একক রানে সমস্ত উপাদান প্রদর্শিত হয় কিনা তা খতিয়ে দেখা দরকার, আমি সম্পাদন করতে পারি -

expect(element.all(xxx).isDisplayed()).toBeTruthy(); //Expectation passes
expect(element.all(xxx).isDisplayed()).toBe(true); //Expectation fails
expect(element.all(xxx).isDisplayed()).toBeTrue(); //Expectation fails

কারণ হচ্ছে .all()মূল্যবোধের একটি বিন্যাস দেখায় এবং প্রত্যাশার সব ধরণের তাই ( getText, isPresent, ইত্যাদি ...) সঙ্গে সম্পাদনা করা যেতে পারে toBeTruthy()যখন .all()ছবি আসে। আশাকরি এটা সাহায্য করবে.


নিস! আমি স্মরণ করছি reduce()বুলেটগুলির অ্যারেটিকে একটি একক মান হিসাবে এবং তারপরে toBe(true)চেকটি প্রয়োগ করা । এটি অনেক সহজ, আপনাকে ধন্যবাদ।
আলেকেক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.