当 Javascript switch 语句返回默认 null 时,单元测试失败 [closed]

When Javascript switch statement returns the default null, unit test is failing [closed]

提问人:meez 提问时间:11/8/2023 更新时间:11/8/2023 访问量:65

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

2天前关闭。

我有这个帮手

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

如何解决这个问题?

javascript reactjs 开关语句 react-testing-library

评论

0赞 VLAZ 11/8/2023
这里显示的怎么可能返回值?我怀疑这不是真正的代码。假设测试是正确的,那么它可能正确地识别了函数的问题。getPrefix()"Test title null"getPrefix()

答:

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 nullreturn 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()