任何方式来修改茉莉花间谍基于参数?
我有一个函数我想testing哪个调用外部API方法两次,使用不同的参数。 我想用Jasmine间谍来嘲笑这个外部的API,并根据参数返回不同的东西。 有没有办法在茉莉花做到这一点? 我能想到的最好的方法就是使用和CallCake进行破解:
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; } }); }); });
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)
资源:
- callFake文档
- 和CallFake vs和.CallFake
你也可以使用$provide
来创build一个间谍。 和模拟使用and.returnValues
而不是and.returnValue
传递参数化的数据。
根据Jasmine文档:通过链接间谍与
and.returnValues
,所有对该函数的调用将返回特定值的顺序,直到它到达返回值列表的末尾,此时它将返回未定义的所有后续调用。
describe('my fn', () => { beforeEach(module($provide => { $provide.value('externalApi', jasmine.createSpyObj('externalApi', ['get'])); })); it('get userName and Id', inject((externalApi) => { // Given externalApi.get.and.returnValues('abc','123'); // When //insert your condition // Then // insert the expectation })); });
- 我如何testingJasmine中的值是“大于还是等于”?
- 前端testing:testing什么和如何testing,以及使用什么工具?
- 如何更改jasmine-nodeasynchronous规范的超时时间
- 使用茉莉来窥探一个没有对象的函数
- 在茉莉花检查对象相等
- jasmine:asynchronouscallback未在由jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超时
- AngularJS $超时function不执行在我的茉莉花规格
- 如何在使用茉莉花进行unit testing时在AngularJS中模拟一项服务?
- Angular 2unit testing:找不到名字'describe'