提问人:meez 提问时间:11/8/2023 更新时间:11/8/2023 访问量:65
当 Javascript switch 语句返回默认 null 时,单元测试失败 [closed]
When Javascript switch statement returns the default null, unit test is failing [closed]
问:
我有这个帮手
const getPrefix = ({ value }: MyValue) => {
switch (value) {
case 'Value one':
return 'Prefix one';
case 'Value two':
return 'Prefix two';
default:
return null;
}
};
但是我的测试失败了:
describe('getPrefix', () => {
it('should generate prefix correctly', () => {
expect(
getPrefix({
title: 'Test title',
value: '',
})
).toBe('Test title');
});
});
它说:
Expected: "Test title"
Received: "Test title null"
我补充道?null
如何解决这个问题?
答:
0赞
cTee
11/8/2023
#1
如果我理解正确,您的代码实际上是在查看其值,在您的情况下是 .这意味着默认情况已正确执行。但是您提供的代码不应该在任何地方附加任何内容,函数应该很简单,测试将失败并显示:value
''
return null
Expected: "Test title"
Received: null
请查看您的代码示例是否正确。
评论
0赞
meez
11/8/2023
它是正确的。我是有目的的添加的,所以在switch语句中它将返回默认值,即value: ''
null
2赞
cTee
11/8/2023
是的,但是为什么说它得到了,除非默认情况是 ,否则这不可能是真的。expect(null).toBe('Test title')
Test title null
return title + null
0赞
Michael Walker
11/8/2023
#2
如果您使用的是 + 运算符或模板字符串文字,并且您有一个值,例如null
let title = 'SWE'
let subtitle = null
let fullTitle = title + subtitle
// `${title} ${subtitle}` will have the same effect
console.log(fullTitle) // SWE null
像这样使用 null 的问题在于它有一个 toString 方法,这意味着如果你用模板文字或 + 运算符强制它,并且第一个操作数是一个字符串,它会将 null 强制为“null”,而不是它是空白或无值。
测试完成了它的工作并发现了错误,因为前面的答案表明,如果预期行为是返回空白或什么都没有,那么你要返回一个空字符串''
评论
0赞
Michael Walker
11/9/2023
你是如何形成你的完整字符串的?在这种特定情况下,我建议使用运算符,因为这将允许空白。如果使用模板文字,则总会有一个额外的空格。您还可以使用删除字符串前后的空格。+
${title} ${subtitle}
.trim()
fullTitle.trim()
评论
getPrefix()
"Test title null"
getPrefix()