el-checkbox 不能用 jest 设置检查或至少在 v-model 上没有变化

Posted

技术标签:

【中文标题】el-checkbox 不能用 jest 设置检查或至少在 v-model 上没有变化【英文标题】:el-checkbox cannot be set checked with jest or at least no change on v-model 【发布时间】:2019-08-24 23:45:41 【问题描述】:

我正在为我的 vuejs 网站设置一些测试。我正在使用element-ui。我正在我的连接页面上开玩笑。我有一个链接到“记住我”的复选框。我会检查它并检查 v-model 的值是否发生了变化。

不幸的是,它没有。

在我的连接文件中,我有复选框:

...
  <el-checkbox v-model="connectionForm.rememberme"></el-checkbox>
...

还有 rememberme 变量:

...
  data() 
    return 
      connectionForm: 
        ...
        rememberme: false
      ,
...

我的测试文件:


describe('Connection', () => 
  const wrapper = mount(Connection)

  it('checkbox click', () => 
    expect(wrapper.vm.connectionForm.rememberme).toBe(false)

    expect(wrapper.contains('el-checkbox')).toBe(true)
    const elCheckbox = wrapper.find('el-checkbox')

    elCheckbox.setChecked(true)
    expect(wrapper.vm.connectionForm.rememberme).toBe(true)
  )
)

 FAIL  frontend/components/user/sessions/New.test.js
  Connexion
    ✓ has a el-button (4ms)
    ✕ checkbox click (10ms)

  ● Connexion › checkbox click

    [vue-test-utils]: wrapper.setChecked() cannot be called on this element

      26 | 
    > 27 |     elCheckbox.setChecked(true)
         |                ^
      28 |     expect(wrapper.vm.connexionForm.rememberme).toBe(true)
      29 |   )
      30 | )

doc checkbox

所以,我用 .trigger('click') 更改了 setChecked(true),仍然没有。所以,我将“点击”更改为“更改”,但仍然无法正常工作......

 FAIL  frontend/components/user/sessions/New.test.js
  Connexion
    ✓ has a el-button (4ms)
    ✕ checkbox click (10ms)
  ● Connexion › checkbox click

    expect(received).toBe(expected) // Object.is equality

    Expected: true
    Received: false

      27 |     elCheckbox.trigger('change')
    > 28 |     expect(wrapper.vm.connectionForm.rememberme).toBe(true)
         |                                                  ^
      29 |   )
      30 | )
      31 | 

如果在某个地方找到这个:

    elCheckbox.element.selected = true

但没有任何改变。

【问题讨论】:

【参考方案1】:

好的,我只需要添加

import ElementUI from 'element-ui'
Vue.use(ElementUI)

然后,我在测试中将所有“el-button”更改为“button”,“el-checkbox”更改为“input”等(最好使用 ID)

【讨论】:

【参考方案2】:

是的

wrapper.find('.el-checkbox input[type="checkbox"]').setChecked(true)

会起作用,因为 el-checkbox 本身将复选框输入包装在其中(作为其子项之一),并且此 api 似乎适用于复选框输入元素。参考:https://vue-test-utils.vuejs.org/api/wrapper/#setchecked.

【讨论】:

以上是关于el-checkbox 不能用 jest 设置检查或至少在 v-model 上没有变化的主要内容,如果未能解决你的问题,请参考以下文章

用 Jest 模拟 jsonwebtoken 模块

为啥 jest 不能为我正在测试的自定义 React 钩子提供 useTranslation 钩子?

如何在 jest 测试用例 +VueJS +Jest 中更改 $route

el-checkbox数据结构深循环不出来

npm run serve 时 vue-cli jest 设置问题

用 jest 和酵素测试 React 组件