【问题标题】:Karma-coverage not recognizing branch test业力覆盖不识别分支测试
【发布时间】:2015-07-13 15:40:10
【问题描述】:

我的 karma-coverage 报告指出,我的“else”分支未包含在以下示例中,但经过测试。任何想法为什么 karma-coverage 无法识别我的测试?

utilities.service.js:

function formatValue(value, form) {

  if (form === '2') {
    valueFormatted = twoDecimals(value);
  } else if (form === '4') {
    valueFormatted = fourDecimals(value);
  }

  return valueFormatted + '!';
}

utilitiesServiceSpec.js:

describe('format values', function() {
  var formattedValue;
  var value;
  var form;

  it('should format 2 decimal places', function() {
    value = 100;
    form = '2';
    formattedValue = utilitiesService.formatValue(value, form);
    expect(formattedValue).toEqual('100.00!');
  });

  it('should format 4 decimal places', function() {
    value = 100;
    form = '4';
    formattedValue = utilitiesService.formatValue(value, form);
    expect(formattedValue).toEqual('100.0000!');
  });
});

【问题讨论】:

    标签: javascript angularjs unit-testing jasmine karma-runner


    【解决方案1】:

    其实业力覆盖是正确的。你错过了测试 else 分支。

    describe( 'format values', function() {
    var formattedValue;
    var value;
    var form;
    // Will test if (form === '2')
    it( 'should format 2 decimal places', function() {
        value = 100;
        form = '2';
        formattedValue = utilitiesService.formatValue( value, form );
        expect( formattedValue ).toEqual( '100.00!' );
    } );
    
    // Will test else if (form === '4')
    it( 'should format 4 decimal places', function() {
        value = 100;
        form = '4';
        formattedValue = utilitiesService.formatValue( value, form );
        expect( formattedValue ).toEqual( '100.0000!' );
    } );
    //Will test else
    it( 'should test if value should not be formatted to decimal if form is other than 2 and 4', function() {
        value = 100;
        form = '5';
        formattedValue = utilitiesService.formatValue( value, form );
        expect( formattedValue ).toEqual( '100!' );
    } );} );
    

    考虑到您的实用程序.service.js 是

    function formatValue( value, form ) {
    var valueFormatted = value;
    if ( form === '2' ) {
        valueFormatted = twoDecimals( value );
    } else if ( form === '4' ) {
        valueFormatted = fourDecimals( value );
    }
    
    return valueFormatted + '!';}
    

    function formatValue( value, form ) {
    var valueFormatted;
    if ( form === '2' ) {
        valueFormatted = twoDecimals( value );
    } else if ( form === '4' ) {
        valueFormatted = fourDecimals( value );
    } else {
        valueFormatted = value;
    }
    
    return valueFormatted + '!';}
    

    【讨论】:

    • 很好,谢谢! else if 是一个错误,因为 form 只有两个可能的值。将其更改为 else 让我获得了 100% 的覆盖率。
    • 如果我没有else 怎么办?我的 branches 覆盖率为 75%,尽管我的 statement 覆盖率为 100%。有没有办法告诉 karma-coverage 不将其算作未采用的分支?
    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 2015-12-27
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 2022-12-07
    相关资源
    最近更新 更多