什么是覆盖因素?是否有任何计算覆盖率的算法?

时间:2016-02-19 09:59:20

标签: javascript angularjs jasmine karma-jasmine istanbul

我正在为Angular编写单元测试用例(使用Jasmine Framework和Karma)来运行测试用例。我需要使用Coverage-html(Istanbul)来覆盖代码。

有不同类型的报道:

  1. 功能
  2. 分行
  3. 语句
  4. 忽略(使用伊斯坦布尔,我们可以忽略)。
  5. 请解释在编写单元测试用例时需要注意的不同类型的覆盖范围和必要因素:

    function setCookie(sessionId) {
        if(sessionId) {
            setCookie('sessionId', sessionId, 21600);
        } else {
            setCookie('sessionId', session.getId(), 21600);
        }
    }
    

    我为此编写了测试用例:

    describe('setCookie()', function(){
        it('should be set a cookie without expiration days', function() {
            var defered =$q.defer();
            spyOn(sessionCard, 'setCookie').andCallFake(function(){
                  return defered.promise;
            })
            sessionCard.setCookie('sessionId', 'sessionId');
            expect(document.cookie).toBeDefined();
            expect(document.cookie).toBeTruthy();
        });
    })  
    

1 个答案:

答案 0 :(得分:0)

在编写单元测试时,您提到的覆盖类型的要点是必要的,但仍然无法保证您已经覆盖了代码。

每个函数都有多种方案可以编写测试。

  1. 所有陈述至少涵盖一次
  2. 涵盖所有快乐路径方案
  3. 涵盖所有失败安全条件(负面情景/例外情况块)
  4. 如果涵盖上述方案,您可以安全地假设您的功能已经过全面测试。 只要确保你的测试取决于输出而不是特定的变量。