茉莉花间谍不工作

Ben*_*Ben 3 javascript jasmine

给出以下代码(页面中包含Jasmine):

  function MyCtorFn() {
    this.myMethod = function() {
          console.log("hello world")
      }
  }

  //arrange
  var myCtrFn = new MyCtorFn();
  spyOn(myCtrFn, 'myMethod');

  //act
  myCtrFn.myMethod();
Run Code Online (Sandbox Code Playgroud)

为什么以下返回undefined?

myCtrFn.myMethod.callCount
Run Code Online (Sandbox Code Playgroud)

Hal*_*yon 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
Run Code Online (Sandbox Code Playgroud)

实际上,它不起作用是非常奇怪的,因为该spyOn方法应该用间谍取代原始方法.

https://github.com/pivotal/jasmine/blob/master/lib/jasmine-core/jasmine.js582.

我个人认为这是非常奇怪的行为.这将导致与其他框架的各种不兼容性.如果你有两个茉莉花实例并且它们都试图窥探相同的功能怎么办?很奇怪.

这就是为什么我认为属性只是在间谍上.

间谍的全部意义在于你无法察觉吗?

var trustedFunction = function () {};
var obj = {
    foo: trustedFunction
}
spyOn(obj, "foo");
obj.foo === trustedFunction; // false? BUSTED
Run Code Online (Sandbox Code Playgroud)

也许间谍不是正确的比喻.A CallTrackerWrapper将是一个不那么邪恶和更卑微的名字.