.callCount
является собственностью spy
.
function MyCtorFn() {
this.myMethod = function() {
console.log("hello world")
}
}
//arrange
var myCtrFn = new MyCtorFn();
var spy = spyOn(myCtrFn, 'myMethod');
//act
myCtrFn.myMethod();
spy.callCount; // 1
На самом деле, это очень странно, что он не работает, так как метод spyOn
должен заменить оригинальный метод с шпиона.
См. https://github.com/pivotal/jasmine/blob/master/lib/jasmine-core/jasmine.js
582
.
Лично я считаю, что это очень странное поведение. Это вызовет всевозможные несовместимости с другими структурами. Что, если у вас было два экземпляра жасмина, и они оба пытались шпионить за одной и той же функцией? Очень странно.
Вот почему я предположил, что свойства были только на шпионе.
Весь смысл шпиона в том, что вы не поддаетесь определению?
var trustedFunction = function() {};
var obj = {
foo: trustedFunction
}
spyOn(obj, "foo");
obj.foo === trustedFunction; // false? BUSTED
Возможно шпион не является правильным аналогия. A CallTrackerWrapper
было бы гораздо менее гнусным и более скромным именем.
А, О, большое спасибо за разоблачение моего недоразумения. – Ben
В качестве альтернативы, я думаю, вы могли бы использовать 'myCtrFn.myMethod.calls.count()' http://jasmine.github.io/2.0/introduction.html#section-23 – Tibos
@Ben: По-видимому, это не только вы, если только вы написал [этот cheatsheet] (http://tobyho.com/2011/12/15/jasmine-spy-cheatsheet/), в котором четко отображается 'callCount', где вы думали, что это будет. –