当输入参数为null时,如何编写函数返回的茉莉花期望值?

时间:2016-11-25 00:24:14

标签: javascript unit-testing jasmine

我有以下javascript函数:

function(fieldObject, value) {

    if (!value) {
      return;
    }

    // call some other functions
}

是否有可能写出一个期望函数在if语句中返回而没有写出多个期望if语句之后的所有其他函数都没有被调用?

1 个答案:

答案 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);
    });
});