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
" обертывание вокруг него, но второе - нет. Этот тест не провалился в
обновление: я возился с созданием нового объекта через new
ing 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.функция.вызовы для проверки равенства определенных полей, если у вас нет точной ссылки на объект для сравнения.