gpt4 book ai didi

javascript - Jasmine SpyOn 关于函数调用

转载 作者:行者123 更新时间:2023-11-27 23:29:15 26 4
gpt4 key购买 nike

您好,我有一个关于使用 Jasmine 模拟 JS 代码的问题。

想象一下有以下情况:

function Test(){
var a = 5;
var b = 3;
Test2(a,b);
}
function Test2(a,b){
var result = a + b;
console.log("result of function Test2: ", result);
}

我想用 Jasmine 模拟我的 Test2 函数调用。我尝试了以下操作:

describe("1# Test Mocking", function () {                                   
it("test: Mocking Example", function () {
var myMock = new Test();
spyOn(myMock, "Test2").and.returnValue(10,10);
expect(Test2.result).toEqual(20);
});
});

但 Jasmine 一直说:错误:Test2() 方法不存在

有谁知道这是为什么以及我该如何解决这个问题?

最佳答案

恐怕你的代码没有多大意义:

  • 您告诉 Jasmine 监视 myMock 中名为 Test2 的方法,但它没有这样的方法(正如 Jasmine 告诉您的那样); Test2 只是一个常规函数;
  • 即使它确实有一个名为 Test2 的方法,您也会在new Test()之后监视它,此时原来的 Test2 已经被调用,而 spy 被宣布为时已晚;
  • 原始 Test2 不返回值,但您告诉 spy 它应该返回 10, 10 (在我看来,您想要 < em>用这两个值调用它,而不是让它返回它们);
  • Test2 除了创建局部变量(结果)和日志记录之外,没有任何副作用(例如返回值或设置实例变量等)它,这使得它非常难以测试;

我认为您需要回到绘图板来明确您希望类(class)做什么。为了帮助您,这里有一个可能的实现,包括一个测试,以查看 a) 是否使用正确的参数调用 Test2 以及 b) 其返回值是否正确存储(同样,我不知道)我不知道你想让这个类做什么,所以我只是提供一些例子):

function Test() {
var a = 5;
var b = 3;
this.result = this.Test2(a, b);
}

Test.prototype.Test2 = function(a, b) {
var result = a + b;
return result;
}

describe("1# Test Mocking", function () {
it("test: Mocking Example", function () {
spyOn(Test.prototype, 'Test2').and.returnValue(20);
var myMock = new Test();
expect(myMock.Test2.calls.argsFor(0)).toEqual([ 5, 3 ]);
expect(myMock.result).toEqual(20);
});
});

关于javascript - Jasmine SpyOn 关于函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34722521/

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