example calls javascript bdd jasmine object-comparison

javascript - calls - Comprobando la igualdad de objetos en Jasmine



jasmine js methods (4)

Es el comportamiento esperado, ya que dos instancias de un objeto no son lo mismo en 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

Para una prueba limpia, debe escribir su propio comparador que compare el amount y la currency :

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

Jasmine tiene emparejadoras toBe para toEqual y toEqual . Si tengo un objeto como este:

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

y trate de comparar el new Money(200, "USD") y el resultado de la suma, estas combinaciones incorporadas no funcionarán como se esperaba. Me las he arreglado para implementar un work-around basado en un método de equals personalizado y un matcher personalizado, pero parece que funciona mucho.

¿Cuál es la forma estándar de comparar objetos en Jasmine?


Estaba buscando lo mismo y encontré una forma existente de hacerlo sin ningún código personalizado o combinadores. Use toEqual() .


Si está buscando comparar objetos parciales, podría considerar:

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


Tu problema es con la verdad. Está intentando comparar dos instancias diferentes de un objeto que es verdadera para la igualdad regular (a == b) pero no verdadera para la igualdad estricta (a === b). El comparador que utiliza jazmín es jasmine.Env.equals_() que busca la igualdad estricta.

Para lograr lo que necesita sin cambiar su código, puede usar la igualdad regular comprobando la veracidad con algo parecido a lo siguiente:

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