2

我有一个返回字符串数组的 vue 函数

1 selectStyles (): string[] {
2  const baseStyles = ['selected-label', 'px-4']
3  const placeholderStyle = this.internalValue?.length === 0 ? 'text-gray-400' : 'text-black'
4
5  return [...baseStyles, placeholderStyle]
6 },

我有三个开玩笑的测试用例测试

  1. ifinternalValue有一个值,因此它的长度是 !0
  2. ifinternalValue是一个空数组,因此它的长度是 0
  3. 如果internalValue未定义,undefined === 0则为假,因此分配了第二个条件

然而 codecov 说第 3 行是部分命中?

知道为什么吗?

我阅读了这篇关于 python 中的 if 语句及其结果的精彩回复,但我认为它不能回答我的问题。

这是我的测试用例:

  it('selectStyles', () => {
    expect(
      Select.computed.selectStyles.call({
        internalValue: []
      })
    ).toEqual(['selected-label', 'px-4', 'text-gray-400'])

    expect(
      Select.computed.selectStyles.call({
        internalValue: ['some opt selected']
      })
    ).toEqual(['selected-label', 'px-4', 'text-black'])

    expect(
      Select.computed.selectStyles.call({
        internalValue: undefined, // unlikely
      })
    ).toEqual(['selected-label', 'px-4', 'text-black'])
  })

蒂亚!

4

1 回答 1

0

您可以使用Nullish 合并运算符 (??)检查是否internalValue存在undefined,因为当左侧操作数为 null 或未定义时,此运算符返回其右侧操作数。

// Here if this.internalValue is undefined we are assigning it with an empty array.
this.internalValue = this.internalValue ?? []

您的逻辑将是这样的

selectStyles (): string[] {
  const baseStyles = ['selected-label', 'px-4']
  this.internalValue = this.internalValue ?? []
  const placeholderStyle = this.internalValue?.length === 0 ? 'text-gray-400' : 'text-black'
  return [...baseStyles, placeholderStyle]
}

我只是根据您的问题陈述给出了我的想法。您可以根据您拥有的实际代码进行修改。

于 2022-02-18T05:48:56.633 回答