Jasmine spy ожидает вызова с " объектом(…)"

я завершаю миграцию с Jasmine 1.3 на 2.0. До сих пор я переработал большую часть кода в соответствии с новым синтаксисом 2.0. Тем не менее, некоторые виды тестов все еще терпят неудачу.

короче, мой тест выглядит так:

var obj = new CustomCriteria();

spyOn(my, "function");
my.function(obj);
expect(my.function).toHaveBeenCalledWith({ big: "fat object" });

мой CustomCriteria класс:

var CustomCriteria = function() {
    this.big = "fat object";
};

тест выдает следующее:

Expected spy function to have been called with [ Object({ big: "fat object" }) ] but actual calls were [ ({ big: "fat object" }) ].

обратите внимание, как ожидание в "Object" обертывание вокруг него, но второе - нет. Этот тест не провалился в

обновление: я возился с созданием нового объекта через newing a function и объект буквальный синтаксис, и кажется, что __proto__s отличаются. Возможно, это влияет на сравнение равенства Жасмин?

2 ответов


до версии 2 объекта равны, если они имеют одинаковые свойства и значения (см. В1.3.1 код)

начиная с версии 2, конструкторы объектов также сравниваются (см. П2.0 код).

в вашем случае: CustomCriteria и {} не имеют одного и того же конструктора.

П. С.: сообщение об исключении также изменен, чтобы содержать имя конструктора в нем.


var x = {a:1}; var y ={a: 1};

x и y провалят сравнение в jasmine ( который, я считаю, использует===), потому что x и y-это просто ссылки на объектные литералы.

ожидать (my.функция.)toHaveBeenCalledWith (obj) не потерпит неудачу, хотя, поскольку ссылки на объекты будут совпадать. Вы можете проверить args вызова с помощью my.функция.вызовы для проверки равенства определенных полей, если у вас нет точной ссылки на объект для сравнения.