如何使用基于配置文件的 if else 语句为代码编写单元测试

How to write unit test for code with if else statements based on config files

我有如下函数:

const config = require('../config')
getLabel (objectList) {
  if (config.labeling.currentVersion === 'v1') {
    // Do something on objectList
    return true
  }
  if (config.labeling.currentVersion === 'v2') {
    // Do something on objectList
    return false
  }
}

并想为其编写测试。我是 node.js 的新手,不确定如何编写测试以覆盖上面示例中的两个 if 语句,因为该函数需要来自固定配置文件的一些参数。有没有办法传递该配置?我完全不知道如何解决这个问题,所以非常感谢任何帮助或线索。我必须提到现在 currentVersion 在我的配置文件中设置为 v1 并且我所拥有的测试如下所示,codecov 建议第二个 if 语句不包含在这个中测试(哒):

const labeler = require('../../src/lib/labeler')
describe('Labeling Unit Testing', () => {
  it('should get the label', () => {
    let label1 = labeler.getLabel([1, 2, 3])
    let label2 = labeler.getLabel([1, 2, 3])
    return assert.equal(label1, label2)
  })

有几种不同的方法可以实现这一点。一个更简单的方法是删除对配置的直接依赖,并允许您换出版本。您可以通过稍微更改签名以采用另一个默认使用配置的参数来做到这一点:

getLabel(objectList, currentVersion = config.labeling.currentVersion) {
  if (currentVersion === 'v1') {
    // Do something on objectList
    return true
  }
  if (currentVersion === 'v2') {
    // Do something on objectList
    return false
  }
}

这提供了您正在寻找的灵活性,同时又不会强迫其他人关注指定版本。