জেসমিনে অবজেক্টের সমতা পরীক্ষা করা হচ্ছে


87

জুঁই অন্তর্নির্মিত ম্যাচচারস toBeএবং toEqual। আমার যদি এই জাতীয় কোনও বিষয় থাকে:

function Money(amount, currency){
    this.amount = amount;
    this.currency = currency;

    this.sum = function (money){
        return new Money(200, "USD");
    }
}

এবং তুলনা করার চেষ্টা করুন new Money(200, "USD")এবং যোগফলের ফলাফল, এই অন্তর্নির্মিত ম্যাচারগুলি প্রত্যাশার মতো কাজ করবে না। আমি একটি কাস্টম equalsপদ্ধতি এবং কাস্টম ম্যাচারের উপর ভিত্তি করে একটি ওয়ার্ক- এভার বাস্তবায়ন করতে সক্ষম হয়েছি , তবে এটি কেবল অনেক কাজ বলে মনে হচ্ছে।

জেসমিনে বস্তুর তুলনা করার মানক উপায় কী?

উত্তর:


174

আমি একই জিনিসটির সন্ধান করছিলাম এবং কোনও কাস্টম কোড বা ম্যাচচার ছাড়াই এটি করার একটি বিদ্যমান উপায় খুঁজে পেয়েছি। ব্যবহার toEqual()


63

আপনি যদি আংশিক বস্তুর তুলনা করতে চান তবে আপনি বিবেচনা করতে পারেন:

describe("jasmine.objectContaining", function() {
  var foo;

  beforeEach(function() {
    foo = {
      a: 1,
      b: 2,
      bar: "baz"
    };
  });

  it("matches objects with the expect key/value pairs", function() {
    expect(foo).toEqual(jasmine.objectContaining({
      bar: "baz"
    }));
  });
});

সিএফ. jasmine.github.io/partial- ম্যাচিং


3

এটির প্রত্যাশিত আচরণ, কারণ জাভাস্ক্রিপ্টে কোনও বস্তুর দুটি উদাহরণ এক নয়।

function Money(amount, currency){
  this.amount = amount;
  this.currency = currency;

  this.sum = function (money){
    return new Money(200, "USD");
  }
}

var a = new Money(200, "USD")
var b = a.sum();

console.log(a == b) //false
console.log(a === b) //false

একটি পরিষ্কার পরীক্ষার জন্য আপনার নিজের ম্যাচারের সাথে তুলনা করা amountএবং currency:

beforeEach(function() {
  this.addMatchers({
    sameAmountOfMoney: function(expected) {
      return this.actual.currency == expected.currency && this.actual.amount == expected.amount;
    }
  });
});


-4

আপনার সমস্যা সত্যতা নিয়ে। আপনি কোনও অবজেক্টের দুটি পৃথক দৃষ্টান্ত তুলনা করার চেষ্টা করছেন যা নিয়মিত সাম্যতার জন্য সত্য (a == খ) তবে কঠোর সাম্যের জন্য সত্য নয় (a === খ)। জুঁই যে তুলনামূলকটি ব্যবহার করেন তা হ'ল জুঁই ।

আপনার কোডটি পরিবর্তন না করে যা প্রয়োজন তা পূরণ করতে আপনি নীচের মতো কিছু দিয়ে সত্যতা পরীক্ষা করে নিয়মিত সাম্যতা ব্যবহার করতে পারেন:

expect(money1.sum() == money2.sum()).toBeTruthy();

9
আপনি যা সম্পর্কে বলেছিলেন ==এবং ===সম্পূর্ণ ভুল। একই বিষয়বস্তুযুক্ত কোনও বস্তুর দুটি পৃথক উদাহরণ উভয়ই মিথ্যা প্রত্যাবর্তন করবে। যে কোনও অ-আদিমদের জন্য, ==এবং ===অভিন্ন আচরণ করুন। jsfiddle.net/9mrmyrs6
হুয়ান মেন্ডেস

@ জুয়ানমেন্ডেস অ্যান্ড্রেস কে দ্বারা উত্তরটি দেখুন ... আপনি ছেলেরা দুটি ভিন্ন জিনিস বলছেন। এটি কোনও বস্তু আক্ষরিক বনাম কোনও বস্তু নতুন করার ক্ষেত্রে কী পার্থক্য?
পেরিস

@ পেপারিস মিমি .... হ্যাঁ আমরা বিভিন্ন কথা বলছি: আমি বলছি যে অ-আদিমদের তুলনা করার সময়, আপনি ব্যবহার করেন ==বা ===জোর করে জড়িত তা বিবেচ্য নয় । Andreas বলছে যে আপনি একটি কাস্টম ম্যাচার তৈরি করতে পারেন। এই সমস্যাটি কীভাবে ঠিক করতে হবে তার সর্বশেষ বিবৃতিটি "সঠিক" তবে প্রথম অনুচ্ছেদে ব্যাখ্যাটি কেবল ভুল is jasmineআপনি যদি toBe()পরিবর্তে ব্যবহার করেন তবে বস্তুর সামগ্রীগুলি চেক করবেequals
হুয়ান মেন্ডেস

a == bতবুও মিথ্যা দিবে যদি aএবং bবিভিন্ন উদাহরণ হয়, আপনি নিজের উত্তরটি সম্পাদনা করতে চাইতে পারেন
লুই আলমেদা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.