Checking object equality in Jasmine

前端 未结 5 1767
小蘑菇
小蘑菇 2021-02-01 11:51

Jasmine has built-in matchers toBe and toEqual. If I have an object like this:

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


        
5条回答
  •  感情败类
    2021-02-01 12:29

    Its the expected behavior, as two instances of an object are not the same in JavaScript.

    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
    

    For a clean test you should write your own matcher that compares amount and currency:

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

提交回复
热议问题