gpt4 book ai didi

javascript - Jasmine - spyOn 构造方法

转载 作者:行者123 更新时间:2023-11-29 23:31:37 25 4
gpt4 key购买 nike

对于下面的代码:

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)
}
}

以下规范失败(未调用 spy ,即 .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)

最佳答案

spy 设置的时机在这里很重要。初始化类调用构造函数。 spy 错过了调用,因为它是在 创建新实例后设置的,请尝试切换顺序 ( 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) .两种调用方式都通过了测试,但我很想知道那里的选择。

关于javascript - Jasmine - spyOn 构造方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47116831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com