আদিম ধরণের (যেমন সংখ্যা, বুলিয়ানস, স্ট্রিং ইত্যাদি) জন্য toBe
এবং এর মধ্যে কোনও পার্থক্য নেই toEqual
; হয় এক জন্য কাজ করবে 5
, true
বা, "the cake is a lie"
।
মধ্যে পার্থক্য বুঝতে পারা toBe
এবং toEqual
, এর তিনটি বস্তু কল্পনা করা যাক।
var a = { bar: 'baz' },
b = { foo: a },
c = { foo: a };
একটি কঠোর তুলনা ( ===
) ব্যবহার করে কিছু জিনিস "একই":
> b.foo.bar === c.foo.bar
true
> b.foo.bar === a.bar
true
> c.foo === b.foo
true
তবে কিছু জিনিস, যদিও তারা "সমান" হলেও তারা "সমান" নয়, কারণ তারা স্মৃতিতে বিভিন্ন স্থানে বসবাসকারী বস্তুর প্রতিনিধিত্ব করে।
> b === c
false
জেসমিনের toBe
ম্যাচারের সাথে কঠোর সমতার তুলনা করার জন্য মোড়ক ছাড়া আর কিছুই নয়
expect(c.foo).toBe(b.foo)
হিসাবে একই জিনিস
expect(c.foo === b.foo).toBe(true)
এর জন্য আমার কথাটি গ্রহণ করবেন না; টো বি এর উত্স কোডটি দেখুন ।
কিন্তু b
এবং c
কার্যত সমতুল্য বস্তুর প্রতিনিধিত্ব করে; তারা উভয় চেহারা
{ foo: { bar: 'baz' } }
এটা যদি আমরা যে বলতে পারে ভালো হবে না b
এবং c
"সমান" এমনকি যদি তারা একই বস্তুর প্রতিনিধিত্ব করে না কি?
প্রবেশ করুন toEqual
, যা "গভীর সাম্যতা" পরীক্ষা করে (যেমন তাদের কীগুলির মান সমান কিনা তা নির্ধারণের জন্য বস্তুর মাধ্যমে পুনরাবৃত্তি অনুসন্ধান করে) search নিম্নলিখিত দুটি পরীক্ষা পাস করবে:
expect(b).not.toBe(c);
expect(b).toEqual(c);
আশা করি যা কিছু বিষয় পরিষ্কার করতে সহায়তা করে।
toEqual()
কী / মান-সামগ্রী দ্বারা তুলনা করা হবে;toBe()
বস্তুর রেফারেন্স দ্বারা তুলনা করা হবে।