[javascript] Jasmine에서 개체 평등 확인

Jasmine 에는 매처 toBetoEqual. 다음과 같은 개체가있는 경우 :

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

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

비교 new Money(200, "USD")하고 합계의 결과를 시도하면 이러한 내장 매 처가 예상대로 작동하지 않습니다. 사용자 지정 equals메서드 및 사용자 지정 매처를 기반으로 한 해결 방법 을 구현 했지만 많은 효과가있는 것 같습니다.

Jasmine에서 물체를 비교하는 표준 방법은 무엇입니까?



답변

나는 똑같은 것을 찾고 있었고 사용자 정의 코드 또는 매처없이 그렇게 할 수있는 기존 방법을 찾았습니다. 사용 toEqual().


답변

부분 개체를 비교하려는 경우 다음을 고려할 수 있습니다.

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"
    }));
  });
});

cf. jasmine.github.io/partial-matching


답변

객체의 두 인스턴스가 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

깨끗한 테스트를 위해 당신은이 비교 자신의 정규 작성해야 amount하고 currency:

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


답변

lodash _.isEqual이 그에 적합하다는 것을 알았습니다.

expect(_.isEqual(result, expectedResult)).toBeTruthy()


답변

당신의 문제는 진실성에 있습니다. 일반 같음 (a == b)에 대해 참이지만 완전 같음 (a === b)에 대해서는 참이 아닌 객체의 두 인스턴스를 비교하려고합니다. 재스민이 사용하는 비교기는
엄격한 동등성을 찾는 jasmine.Env.equals_ () 입니다.

코드를 변경하지 않고 필요한 작업을 수행하려면 다음과 같이 진실성을 확인하여 정규 동등성을 사용할 수 있습니다.

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


답변