给出以下代码(页面中包含Jasmine):
function MyCtorFn() {
this.myMethod = function() {
console.log("hello world")
}
}
//arrange
var myCtrFn = new MyCtorFn();
spyOn(myCtrFn, 'myMethod');
//act
myCtrFn.myMethod();
为什么以下返回未定义?
myCtrFn.myMethod.callCount
答案 0 :(得分:5)
.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
也许间谍不是正确的类比。 CallTrackerWrapper
将是一个不那么邪恶和谦虚的名字。
答案 1 :(得分:3)
获取间谍呼叫计数的记录方式是通过calls
属性:
myCtrFn.myMethod.calls.count() // 1
文档:http://jasmine.github.io/2.0/introduction.html#section-23
查看来源,似乎其他任何地方都无法获取此信息:https://github.com/pivotal/jasmine/blob/master/src/core/CallTracker.js https://github.com/pivotal/jasmine/blob/master/src/core/base.js#L75