Vue-test-utils использует mixin для vee-validate в nuxt

Я пытаюсь проверить, работает ли проверка для формы с помощью vee-validate и vue-test-utils. Я также использую nuxt и создал собственный плагин, который устанавливает vee-validate и предоставляет два пользовательских вычисляемых свойства как миксин.

Проблема в том, что мне нужен способ использовать эти миксины в экземпляре localVue, однако я не могу просто импортировать весь файл, так как это приводит к тому, что vee-validate устанавливается дважды на основной экземпляр vue. Я также не могу просто сказать localVue.use(MyCustomVeeValidatePlugin), потому что у плагина нет метода установки ("плагины" в nuxt несколько отличаются от vue).

Что работает, так это создание файла, который экспортирует isFormValid и isFormChanged, а затем плагин импортирует эти методы. Затем мне также нужно импортировать эти методы в тестовый файл и создать миксин для экземпляра localVue. Я бы предпочел определить миксин в одном файле плагина. Я знаю, что это очень специфично, но у кого-нибудь была подобная проблема? Я мог бы представить, что переписать плагин так, как он определен в документации Vue.js (с методом установки), и установить его как-нибудь.

Плагин:

import Vue from "vue";
import VeeValidate from "vee-validate";
Vue.use(VeeValidate);

//create global mixin for checking if form is valid
//note: every input element needs a name
Vue.mixin({
  computed: {
    isFormValid() {
      return Object.keys(this.fields).every(key => 
      this.fields[key].valid);
    },
    isFormChanged() {
      return Object.keys(this.fields).some(key => 
      this.fields[key].changed);
    }
  }
});

1 ответ

Насколько я знаю, на основе рекомендаций, которые я прочитал в "Тестировании приложений VueJs ( https://www.manning.com/books/testing-vue-js-applications), автор, который также является основным автором vue-test-utils рекомендует:

Я уже говорил о том, почему вы должны использовать конструктор localVue и избегать установки на базовый конструктор. Это особенно важно для Vue Router. Всегда используйте localVue для установки Vue Router в тестах. Вы должны убедиться, что ни один файл в вашем наборе тестов не импортирует файл, который вызывает Vue.use с Vue Router. Легко случайно импортировать файл, который включает Vue.use. Даже если вы не запускаете модуль, если модуль импортирован, то код внутри него будет оценен.

Исходя из этой рекомендации, я переместил вызовы Vue.use() из файлов, таких как store.js и router.js, в main.js, который не используется во время тестирования.

Другие вопросы по тегам