【发布时间】:2018-04-03 09:45:20
【问题描述】:
在 node.js 应用程序中,我有一个带有 getter 的类,其中包含一个大的 switch 语句,与此相同,但更大,具有未发布的产品特定值,而不是 a、b、c、1、2、3 等:
Class SomeClass () {
constructor (someVar) {
this.someProp = someVar
}
get someGetter () {
switch (this.someProp) {
case 'a':
case 'b':
return 1
case 'c':
case 'd':
case 'e':
return 2
case 'f':
return 3
case undefined:
return null
default:
return 0
}
}
}
然后我有一个像这样结构的测试用例,它到达每个可能的路径:
const expectedResults = new Map(Object.entries({
a: 1,
c: 2,
f: 3,
null: null,
z: 0
}))
for (const [testCase, expected] of expectedResults) {
const someInstance = new SomeClass(testCase)
t.equal(someInstance.someGetter, expected)
}
t.end()
这让我覆盖了所有可能的路径,node tap 覆盖率报告中没有危险信号。
悬停,我得到一个(黄色)未覆盖的行,它是 switch 语句本身的行:示例代码中的第 6 行,行:
switch (this.someProp) {
我尝试在每个 return 之后添加冗余的 breaks,但这些随后(正确地!)标记为未覆盖(因为它们无法访问)。
我认为它可能在抱怨,因为它在返回 1 的路径中测试了 'a',但在同一路径中没有 'b'。但如果这就是问题所在,我不明白为什么它会标记 switch 语句本身,而不是那些特定的行。
【问题讨论】:
-
有什么问题?你已经有了答案?你在这里问什么?
-
我已将标题编辑为语法问题。如果您有问题,我们鼓励您发布自己的问题的答案:它与将来搜索相同问题的其他人分享知识,同时保持开放有人发布更好答案的可能性。见stackoverflow.com/help/self-answer
标签: javascript node.js code-coverage istanbul