代码覆盖率显示if-branch为遗漏,但删除则会导致错误

时间:2019-06-09 02:27:31

标签: javascript node.js unit-testing code-coverage test-coverage

我正在使用if-branch测试代码

fVal => {
    if(!fCache[idxF]) fCache[idxF] = {}
    fCache[idxF][idxCb] = fVal
}

declared as "missed" by Coveralls

但是,如果我删除该if行, the tests fail complaining about undefined prop

fCache[idxF][idxCb]=fVal;
                   ^
TypeError: Cannot set property '0' of undefined

这正是if分支纠正的错误。 那么为什么在该报道中将其声明为“缺失”?


已添加。 这是失败的测试:

test('ap over single CPS function', t => {
    const cpsFun = cb => cb(42)
    const cpsNew = ap(cb => cb(x => x*2))(cpsFun)
    cpsNew(t.cis(84))
})

以及要测试的相关代码段:

const ap = (...fns) => cpsFn => {
  let fCache = {},
    argsCache = {}
      ...
    fns.forEach((f, idxF) => f(...cbs.map((cb, idxCb) =>
      fVal => {
        if(!fCache[idxF]) fCache[idxF] = {}
          ...
      }
    )))
  }
  return cpsNew
}

1 个答案:

答案 0 :(得分:1)

根据问题的内容,您的代码有点难以理解,但我想您不了解代码覆盖率如何用于条件分支。

“ if”语句导致两个分支:条件为true和条件为false。如果您的测试仅对条件评估为“真”的数据进行操作,则您的覆盖范围恰好是2个分支中的1个(我相信报告告诉您的内容)。

要获得该行的100%覆盖率,您必须对该行进行2次执行-一次条件评估为true,另一次条件评估为false。