Javascript 函数调用上的Jasmine SpyOn
你好,我有一个关于用Jasmine模拟JS代码的问题 想象一下以下情况:Javascript 函数调用上的Jasmine SpyOn,javascript,jquery,jasmine,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#
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一直说:Error:Test2()方法不存在
有人知道这是为什么吗?我如何解决这个问题?恐怕你的代码没有多大意义:
- 你告诉Jasmine监视名为
的Test2
方法,但它没有这样的方法(正如Jasmine告诉你的)myMock
只是一个常规函数李>Test2
- 即使它确实有一个名为
的方法,您也会在Test2
之后对其进行监视,此时原始的new Test()
可能已经被调用了,并且该监视将被宣布为时已晚李>Test2
- 原始的
没有返回值,但是你告诉间谍它应该返回Test2
(在我看来,你想用这两个值调用它,而不是让它返回它们)李>10,10
除了创建一个局部变量(Test2
)并记录它之外,没有任何副作用(比如返回一个值或设置一个实例变量等),这使得它非常不稳定李>result
Test2
,以及b)其返回值是否正确存储(同样,我不知道您希望该类做什么,所以我只提供一些示例):
请看,那里的共识是“不,他们不应该”!感谢您的反馈@Andreasniedermir。我改了标题非常感谢你!这真是一个很好的解释。我对《茉莉花》中间谍的工作方式有点迷茫。你的例子和解释对我很有帮助。
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);
});
});