gpt4 book ai didi

javascript - 有什么方法可以根据参数修改 Jasmine spy ?

转载 作者:IT王子 更新时间:2023-10-29 02:39:14 26 4
gpt4 key购买 nike

我想测试一个函数,它使用不同的参数调用外部 API 方法两次。我想用 Jasmine spy 模拟这个外部 API,并根据参数返回不同的东西。有没有办法在 Jasmine 中做到这一点?我能想出的最好办法是使用 andCallFake 进行黑客攻击:

var functionToTest = function() {
var userName = externalApi.get('abc');
var userId = externalApi.get('123');
};


describe('my fn', function() {
it('gets user name and ID', function() {
spyOn(externalApi, 'get').andCallFake(function(myParam) {
if (myParam == 'abc') {
return 'Jane';
} else if (myParam == '123') {
return 98765;
}
});
});
});

最佳答案

在 Jasmine 3.0 及以上版本中,您可以使用 withArgs

describe('my fn', function() {
it('gets user name and ID', function() {
spyOn(externalApi, 'get')
.withArgs('abc').and.returnValue('Jane')
.withArgs('123').and.returnValue(98765);
});
});

对于早于 3.0 的 Jasmine 版本,callFake 是正确的方法,但您可以使用一个对象来保存返回值来简化它

describe('my fn', function() {
var params = {
'abc': 'Jane',
'123': 98765
}

it('gets user name and ID', function() {
spyOn(externalApi, 'get').and.callFake(function(myParam) {
return params[myParam]
});
});
});

根据 Jasmine 的版本,语法略有不同:

  • 1.3.1: .andCallFake(fn)
  • 2.0: .and.callFake(fn)

资源:

关于javascript - 有什么方法可以根据参数修改 Jasmine spy ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198353/

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