我有以下javascript函数:
function(fieldObject, value) {
if (!value) {
return;
}
// call some other functions
}
是否有可能写出一个期望函数在if语句中返回而没有写出多个期望if语句之后的所有其他函数都没有被调用?
答案 0 :(得分:1)
这是一个非常有趣的问题: 我不是百分之百确定是否有办法实现你所寻求的目标,但是我已经用这个技巧来验证早期返回的状态(就像你的情况一样)
在这里我们如何使用它 -
void
方法return false
退出处理。你可以
不要在代码中使用此返回值,但您可以确定测试它
有效。return false
打破它。代码示例以说明上述情况:
var testObj = {
voidLikeFunction : function(arg1){
if(!arg1){
return false;
} else {
console.log('Executes void like function..');
this.callAFunction();
this.callAnotherFunction();
this.callYetAnotherFunction();
}
},
callAFunction : function(){
console.log('callAFunction()');
},
callAnotherFunction : function(){
console.log('callAnotherFunction()');
},
callYetAnotherFunction : function(){
console.log('callYetAnotherFunction()');
},
expectedToReturnInt : function(arg1){
if(!arg1){
return false
} else {
var sum =0;
for(int i=0; i<10; i++){
sum += i;
}
return sum;
}
}
};
describe('testVoidLikeFunc', function(){
it('testEarlyReturn', function(){
var val = testObj.voidLikeFunction();
expect(val).toBe(false);
});
it('testLateReturn', function(){
spyOn(testObj, 'callAFunction').and.callThrough();
spyOn(testObj, 'callAnotherFunction').and.callThrough();
spyOn(testObj, 'callYetAnotherFunction').and.callThrough();
var dummyParam = true;
testObj.voidLikeFunction(dummyParam);
expect(testObj.callAFunction).toHaveBeenCalled();
expect(testObj.callAnotherFunction).toHaveBeenCalled();
expect(testObj.callYetAnotherFunction).toHaveBeenCalled();
});
});
describe('testExpectedToReturnInt', function(){
it('testEarlyReturn', function(){
var val = testObj.expectedToReturnInt();
expect(val).toBe(false);
});
it('testLateReturn', function(){
var dummyParam = true;
var val = testObj.expectedToReturnInt(dummyParam);
expect(val).toEqual(45);
});
});