Как написать ожидаемое жасмин, возвращаемое функцией, когда входной параметр равен нулю?

У меня есть следующая функция javascript:

function(fieldObject, value) {

    if (!value) {
      return;
    }

    // call some other functions
}

Можно ли написать ожидание того, что функция будет возвращена в выражении if без написания нескольких ожиданий о том, что все остальные функции после оператора if не вызываются?

javascript,unit-testing,jasmine,

1

Ответов: 1


1 принят

Это довольно интересный вопрос: я не уверен на 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);
    });
});
JavaScript, модульное тестирование, жасмин,
Похожие вопросы