如何使用Jest对Vue.js组件中的方法进行单元测试

jeffcodes:

我正在尝试对组件方法进行单元测试。这里的问题并未提出如何从单元测试中访问组件方法。

具体来说,鉴于以下我的Vue组件,如何doSomeWork()从单元测试中访问

组件视图:

<template>
    <div id="ThisStuff">
        <span>
            Some other stuff is going on here
        </span>
    </div>
</template>

<script>
    import foo from 'bar'

    export default {
        props: {
            ObjectWithStuffInIt: [
                {
                    id: 1
                    bar: false
                },
                {
                    id: 2
                    bar: false
                },
            ]
        },
        data: {
            foo: "foo"
        },
        methods: {
            doSomeWork: function() {
                for (var i = 0; i < ObjectWithStuffInIt.length; i++) { 
                    if (foo === "diddly") {
                        ObjectWithStuffInIt[i].bar = true;
                    }
                }
            }
        }
    }
</script>

我的测试代码:

import {createLocalVue, shallow} from 'vue-test-utils'
import ThisVueFile.test.js from '../../thisPlace/ThatPlace/ThisVueFile.vue'
import Vuex from 'vuex'

const localVue = createLocalVue()
localVue.use(Vuex);

describe('ThisVueFile.test.js', () => {
    let user;
    let store;

    beforeEach(() => {
        let getters = {
            user: () => user
        }

        store = new Vuex.Store({ getters })
    })

    // I need to fill propsData: with some local data here 
    //     because it is server data
    // I need to have access to the method
    // I need to use local data for `foo` in the test. 

    it(' When foo is set to -diddly- then set bar to true ', () => {
        foo = "diddly";
        // run the method in the component here 
        doSomeWork();

        expect(OjbectWithStuffInIt[0].bar.equals(true));
    })
})
tony19:

调用组件方法

包装器通过其vm属性提供对组件实例的访问,因此您可以使用以下方法直接调用该方法:

wrapper.vm.doSomeWork()

设置 props

例:

it('...', () => {
  const wrapper = shallowMount(MyComponent, {
    propsData: {
      myItems: [
        { id: 200, bar: false },
        { id: 300, bar: false }
      ]
    }
  });

  // OR
  wrapper.setProps({
    myItems: [
      { id: 400: bar: true }
    ]
  })
})

修改组件数据属性

  • 安装选项包括data可用于在安装之前初始化组件数据属性。
  • 您也可以setData()在组件安装后使用包装器
  • 您可以直接通过包装器的vm属性访问组件的data 属性。

例:

it('...', () => {
  const wrapper = shallowMount(MyComponent, {
    data() {
      return {
        foo: 1
      }
    }
  });

  // OR
  wrapper.setData({ foo: 2 })

  // OR
  wrapper.vm.foo = 3
})

完整的例子

总的来说,您的测试可能类似于以下内容:

import { createLocalVue, shallowMount } from '@vue/test-utils'
import MyComponent from '@/components/MyComponent'

describe('MyComponent', () => {
  it('When foo is set to -something-, set bar to true', () => {
    const myItems = [
      { id: 200, bar: false },
      { id: 300, bar: false }
    ]
    const localVue = createLocalVue()
    const wrapper = shallowMount(MyComponent, {
      localVue,
      propsData: {
        myItems
      }
    })

    wrapper.vm.foo = 'something'
    wrapper.vm.doSomeWork()

    expect(myItems[0].bar).toBe(true)
  })
})

演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 Jest 对连接的 Redux 组件内的组件中的 Redux 操作进行单元测试

如何对将方法调用到父组件的组件中的功能进行单元测试

使用JEST对Vue.js路由器进行单元测试-如何模拟页面?

如何对反应组件的方法进行单元测试?

如何对依赖服务的组件的方法进行单元测试?

使用酶的JS单元测试:如何在继续进行测试用例之前等待组件方法中的setState完成

如何对使用nuxt-i18n的Vue.js组件进行单元测试

如何使用Jest在Node.js中对uncaughtException和unhandledRejection进行单元测试

使用Jest on React组件进行单元测试

Vue和Jest单元测试组件

如何为使用Vuex存储的Vue表单组件编写Jest单元测试?

如何对__init __()函数中调用的方法进行单元测试?

如何在python中对POST方法进行单元测试?

如何在模拟方法中对函数进行单元测试

无法使用 Jest 在我的单元测试中呈现 Vue 组件

使用Element-UI进行单元测试中的Vue组件注册警告

如何使用Jest测试JSX Vue组件

如何使用可返回任何元素数组的render函数对Vue.js功能组件进行单元测试?

Vue.js单元测试-如何检查组件是否具有方法?

你如何在 Jasmine/Jest 中对独特的方法调用进行单元测试?

在Jest中,如何对一个可观察到的方法进行单元测试

如何对POST方法进行单元测试

如何对空方法进行单元测试

如何使用Enzyme和Jest在单元测试中检查嵌套的React组件的值

如何使用Jest对类星体应用进行单元测试?

在vue组件实例中更新道具以进行单元测试

Vue,Vuex:如何使用命名空间存储和模拟对组件进行单元测试?

如何在 Angular 2 单元测试中测试共享组件的方法?

如何对angular7中具有@Input变量的组件进行单元测试?