以下代码:
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)
答案 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)
。测试以任何一种调用方式通过,但我很想知道那里的选择。