javascript - 如何测试组件中另一个模块的自定义指令

标签 javascript vue.js vuejs2 jestjs vue-test-utils

我有一个 UI 库,我们将其导入到我们的应用中。在 UI 库中有一个自定义指令 toggle,我们用它来打开和关闭模式。当我运行单元测试时,出现此错误:

[Vue warn]: Failed to resolve directive: toggle

      (found in <Identity>)

在我的 Identity 组件中,我使用了 UI 库中的组件 checkbox,它包含以下指令:

<checkbox
      :value="rememberMe"
      :label="$t('identity.rememberMeHeading')"
      name="rememberMe"
      data-test="remember-me"
      @input="toggleRememberMe()">
  <span slot="subtext"> {{ $t('identity.rememberMeSubheading') }}
    <a v-toggle:a-modal="'learn-more-modal'"
       @click.prevent="() => {}">{{ $t('identity.learnMore') }}</a>
  </span>
</checkbox>

如何修复我的 Identity.spec.js 中的这个错误?导入后,我有:

const localVue = createLocalVue()

localVue.use(Vuex)
localVue.use('toggle') 

最佳答案

@vue/test-utils 1.x中,shallowMountmount的第二个参数接受一个指令 定义要在组件中使用的指令的选项。在 2.x 中,选项是 global.directives .您可以使用此选项来声明 v-toggle 指令:

shallowMount(MyComponent, {
  // @vue/test-utils @1.x
  directives: {
    toggle() { /* stub */ }
  },

  // @vue/test-utils @2.x
  global: {
    directives: {
      toggle() { /* stub */ }
    }
  }
})

例如,要确保指令在组件中使用:

const toggle = jest.fn()

shallowMount(MyComponent, {
  // @vue/test-utils @1.x
  directives: {
    toggle
  },

  // @vue/test-utils @2.x
  global: {
    directives: {
      toggle
    }
  }
})

expect(toggle).toHaveBeenCalled()

关于javascript - 如何测试组件中另一个模块的自定义指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56499954/

相关文章:

javascript - 将参数传递给 url 时转义 JavaScript 中的正斜杠

vue.js - 如何解决Vue router change error with param?

ruby-on-rails - Rails+Vue.js 实例上是否有 I18n 在单个存储库中共享语言环境?

javascript - 从 Vuejs 中的 localStorage 中删除值

javascript - 尝试使用 Phantom.js 生成 PDF 时 Vue.js 不呈现

javascript - 获取提到的用户的状态/事件

javascript - 无法解析 - Javascript 中的正则表达式

javascript - if/else 列出可能的日期条件永远不会成功

javascript - 从 NuxtJS 中的 json 文件获取单个帖子 id

laravel-5 - Laravel Vue.js 与 CKeditor 4 和 CKFinder3(文件管理器)的集成