17

我将 Jest 与 Vue-Test-Utils 一起使用。我一直在使用的代码如下所示:

beforeEach(() => {
  wrapper = shallow(GridContainer, {
    data: {
      pageSize: count
    },
    propsData: {
      userId,
      managerId
    }
  })
})

在这个例子中,我想在调用挂载的生命周期之前设置 pageSize 值。上面代码的问题是我在测试运行时开始收到以下警告:

[Vue warn]: Do not use built-in or reserved HTML elements as component id: data

当我删除上面的数据属性时,警告消失了。

我是否正确设置数据?如果是这样,我应该如何处理警告?

我应该以另一种方式设置数据吗?

4

3 回答 3

22

请尝试这样:

beforeEach(() => {
  wrapper = shallow(GridContainer, {
    propsData: {
     userId,
     managerId
    }
  })
 wrapper.setData({pageSize: count})
})

参考:setData https://vue-test-utils.vuejs.org/en/api/wrapper/setData.html

于 2018-03-02T16:01:32.480 回答
17

我的解决方案是将数据定义为初始化中的函数:

beforeEach(() => {
  wrapper = shallow(GridContainer, {
    propsData: {
      userId,
      managerId
    },
    data: function() {
      return {
        pageSize: count
      }
    }
  })
})

就我而言,yukihirop using 提供的解决方案setData()不起作用。

我的组件正在从我的测试环境中未定义的窗口对象访问数据。此数据正在模板中输出。这导致在安装后立即引发异常 - 在我有机会调用之前setData()

于 2019-06-04T08:55:21.207 回答
1

Nicolas Betsworth的解决方案是正确的,但是也可以将 setData 与 Vue.nextTick() 一起使用。Vue.nextTick() 将重新渲染组件。

beforeEach(() => {
  wrapper = shallow(GridContainer, {
    propsData: {
     userId,
     managerId
    }
  })
 wrapper.setData({pageSize: count})
 Vue.nextTick()
})

Vue.nextTick

于 2020-05-18T09:55:58.447 回答