javascript - Jasmine SpyOn 关于函数调用

标签 javascript jquery jasmine

您好,我有一个关于使用 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/

相关文章:

javascript - 如何让 tooltipster 在 mouseup 上触发并在 ajax 函数中使用选定的文本?

javascript - 哪些场景我们要使用构造函数注入(inject)和spyon()注入(inject)?哪一个最好?

unit-testing - 如何在 VueJS 中测试计算属性?

php - 如何存储在客户端机器上并重复使用 php/mysql 查询?

javascript - 主干集合未使用 JSONP 请求更新

javascript - Node 脏在运行过程中不会持续存在

javascript - 如何通过动态输入在 jQuery 中查找百分比

javascript - 警告 : Expected server HTML to contain a matching nav in div

javascript - jquery ajax ParseError 与 Musixmatch API

javascript - 访问 Angular 分量元数据