Jasmine - spyOn构造函数方法

时间:2017-11-04 23:52:43

标签: javascript jasmine

以下代码:

class Endpoint {
  constructor(type, start_value) {
    this.type = type
    this.end_value = start_value + 2
    this.constructor.prefill(type, this.end_value)
  }
  static prefill(type, end_value) {
    console.log("called")
    $("#end_value").text(end_value)
  }
}

以下规范失败(未调用间谍,即.not.toHaveBeenCalled()次传递),即使我可以通过console.log输出确认并且DOM $("#end_value")正确填充电话正在发生。

describe("when constructing end point class", function() {
  beforeEach(function() {
    endpoint = new Endpoint("typeA", 3)
    spyOn(endpoint.constructor, "prefill")
  })
  it("calls prefill", function() {
    expect(endpoint.constructor.prefill).toHaveBeenCalledWith("typeA", 5)
  })
})

使用以下

jasmine (2.7.0)
jasmine-core (2.8.0)
jasmine-jquery-rails (2.0.3)

1 个答案:

答案 0 :(得分:1)

这里的时间对于间谍设置很重要。初始化类会调用构造函数。间谍错过了电话,因为在创建新实例后设置,尝试切换顺序(plunker):

import { Endpoint } from './endpoint';

describe("when constructing end point class", function() {

  let endpoint;

  beforeEach(function() {
    spyOn(Endpoint, "prefill"); // add spy before initializing class
    endpoint = new Endpoint("typeA", 3);
  })
  it("calls prefill", function() {
    expect(Endpoint.prefill).toHaveBeenCalledWith("typeA", 5);
  })
});

旁注:之前我还没有看到this.constructor.myStaticMethod语法,通常从类定义中调用静态方法:Endpoint.prefill(param1, param2)。测试以任何一种调用方式通过,但我很想知道那里的选择。