如何检查 mixin 是否传递给了组件?

How to check if mixin was passed to the component?

我正在使用 vue-test-utils 库 测试 VueJS 2 应用程序,我想检查 mixin 是否被传递 到特定的组件,比如使用 mount 安装组件和访问 mixin 抛出类似 wrapper.vm.mixins.

的东西

我已经尝试使用以下方式访问:wrapper.vm.mixinwrapper.vm.mixinswrapper.mixinwrapper.mixinswrapper.vm.$mixinwrapper.vm.$mixins

我的vue组件是这样的:

export default (Vue as VueConstructor<Vue & InstanceType<typeof MyMixin>>).extend({
  name: 'MyComponent',
  mixins: [MyMixin]
})

Mixin.ts

import Vue from 'vue';

const Sum = Vue.extend({
  name: 'Sum',
  methods: {
       sum(numA: number, numB: number) {
        return numA + numB;
       }
  }
});

export { Sum };

答案一:

您可以在测试中导入 mixin 并检查它是否在 wrapper.vm.$options.mixins 数组中传递,如下所示:

import { Sum } from './Sum'

const mixins = wrapper.vm.$options.mixins as any;

expect(mixins).toContain(Sum)

答案二:

您可以通过混音名称进行测试,但您需要确保混音具有 名称 属性 否则它将 return 未定义:

const mixins = (wrapper.vm.$options.mixins as any).map((mixin: any) => mixin.options.name)

expect(mixins).toContain('Sum');