Это довольно интересный вопрос: я не уверен на 100%, если есть способ добиться того, что вы ищете, однако я использовал этот трюк, чтобы проверить состояние раннего возвращения (как в вашем случае)
Вот как я его использовал -
- Сделайте свои
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);
});
});