【问题标题】:Jasmine Spies Not Working茉莉花间谍不工作
【发布时间】:2014-01-25 05:40:42
【问题描述】:

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

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

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

  //act
  myCtrFn.myMethod();

为什么下面的返回未定义?

myCtrFn.myMethod.callCount

【问题讨论】:

    标签: javascript jasmine


    【解决方案1】:

    .callCountspy 的属性。

    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方法应该用spy替换原来的方法。

    https://github.com/pivotal/jasmine/blob/master/lib/jasmine-core/jasmine.js 线582

    我个人认为这是非常奇怪的行为。这将导致与其他框架的各种不兼容。如果你有两个 jasmine 实例并且它们都试图监视同一个函数怎么办?很奇怪。

    这就是为什么我认为这些属性只存在于间谍身上。

    间谍的全部意义在于你无法被发现,对吧?

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

    也许间谍 不是正确的类比。 CallTrackerWrapper 将是一个不那么邪恶和谦逊的名字。

    【讨论】:

    • 或者,我认为你可以使用myCtrFn.myMethod.calls.count() jasmine.github.io/2.0/introduction.html#section-23
    • @Ben:显然不只是你,除非你写了this cheatsheet,它清楚地表明callCount 是你认为的位置。
    • 那个备忘单已经超过 2 年了,所以也许 jasmine 改变了实现?我总是厌倦第 3 方的信息。
    • spy.callCount 对我不起作用,但 spy.calls.count() 可以。还有谁能告诉我如何重置间谍?
    • 我链接到的文档确实:P。 myCtrFn.myMethod.calls.reset()
    【解决方案2】:

    记录的获取间谍调用次数的方法是通过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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多