javascript - 如何在 Vue.js 中测试计算属性?无法模拟 "data"

标签 javascript unit-testing testing vue.js vuejs2

我想知道如何在 Vue.js 的单元测试中测试计算属性。

我已经通过vue-cli(基于webpack)创建了一个新项目。

例如这是我的组件:

<script>
  export default {
    data () {
      return {
        source: []
      }
    },
    methods: {
      removeDuplicates (arr) {
        return [...new Set(arr)]
      }
    },
    computed: {
      types () {
        return this.removeDuplicates(this.source))
      }
    }
  }
</script>

我试过这样测试

it('should remove duplicates from array', () => {
  const arr = [1, 2, 1, 2, 3]
  const result = FiltersList.computed.types()
  const expectedLength = 3

  expect(result).to.have.length(expectedLength)
})

QUESTION(两个问题):

  1. this.sourceundefined。如何模拟或设置值(value)? (FiltersList.data 是一个函数);
  2. 也许我不想调用 removeDuplicates 方法,但如何模拟( stub )此调用?

最佳答案

好的。我找到了一个愚蠢的解决方案。愚蠢但有效。

您已被警告 =)

思路:使用 .call({}) 替换 this inside that calls:

it('should remove duplicates from array', () => {
  const mockSource = {
     source: [1, 2, 1, 2, 3],
     getUniq (arr) {
       return FiltersList.methods.removeDuplicates(arr)
     }
  }

  const result = FiltersList.computed.types.call(mockSource)
  const expectedLength = 3

  expect(result).to.have.length(expectedLength)
})

所以基本上你可以用任何类型的数据指定你自己的this。 并调用 YourComponent.computed.foo.call(mockSource)。方法相同

关于javascript - 如何在 Vue.js 中测试计算属性?无法模拟 "data",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41858262/

相关文章:

javascript - Paper.js 上的触发工具事件

javascript - 如何为 addEventListener 创建更短的等价物

javascript - 如果存在 div,则激活函数

c# - Visual Studio 2015 单元测试不一致

java - 使数据库确定性地失败以进行测试

testing - 在 PHPUnit 中是否有继续测试失败的命令?

javascript - Jquery 延迟来自每个循环的 ajax 请求

javascript - 在Angular JS中导出Excel而不使用第三方库

c# - 有没有办法告诉 Autofixture 只设置具有特定属性的属性?

c# - 最小起订量工作单位