Что такое «заглушенные дочерние компоненты» в Vue Test Utils? - PullRequest
0 голосов
/ 24 октября 2018

Vue Test Utils имеет метод API под названием shallowMount(), который:

... создает Wrapper, который содержит смонтированные ивизуализированный компонент Vue, но с заглушенными дочерними компонентами.

Я искал веб-сайт документации Vue Test Utils, но не смог найти хорошее объяснение того, как ведут себя эти заглушенные дочерние компоненты.

  1. Что это за дочерние компоненты с заглушками?
  2. Какие части жизненного цикла компонента Vue они проходят?
  3. Есть ли способ предварительно запрограммировать их поведение?

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Что такое дочерние компоненты-заглушки?

Дочерний компонент-заглушка - это замена дочернего компонента, отображаемого тестируемым компонентом.

Представьте, что у вас естьParentComponent компонент, который отображает ChildComponent:

const ParentComponent = {
  template: `
    <div>
      <button />
      <child-component />
    </div>
  `,
  components: {
    ChildComponent
  }
}

ChildComponent отображает глобально зарегистрированный компонент и вызывает метод внедренного экземпляра при его монтировании:

const ChildComponent = {
  template: `<span><another-component /></span>`,
  mounted() {
    this.$injectedMethod()
  }
}

Если вы используетеshallowMount для монтирования ParentComponent, Vue Test Utils отобразит заглушку ChildComponent вместо оригинальной ChildComponent.Компонент-заглушка не отображает шаблон ChildComponent и не имеет метода жизненного цикла mounted.

Если вы вызвали html в оболочке ParentComponent, вы увидите следующий вывод:

const wrapper = shallowMount(ParentComponent)
wrapper.html() // <div><button /><child-component-stub /></div>

Заглушка выглядит примерно так:

const Stub = {
  props: originalComonent.props,
  render(h) {
    return h(tagName, this.$options._renderChildren)
  }
}

Поскольку компонент-заглушка создается с информацией из исходного компонента, вы можете использовать исходный компонент в качестве селектора:

const wrapper = shallowMount(ParentComponent)
wrapper.find(ChildComponent).props()

Vue не знает, что он рендерит заглушенный компонент.Vue Test Utils устанавливает его так, что когда Vue пытается разрешить компонент, он разрешается с использованием заглушенного компонента, а не оригинала.

Какие части жизненного цикла компонента Vue они проходят?

Заглушки проходят через все части жизненного цикла Vue.

Есть ли способ предварительно запрограммировать их поведение?

Да, вы можетесоздайте пользовательскую заглушку и передайте ее, используя параметр монтирования stubs:

const MyStub = {
  template: '<div />',
  methods: {
    someMethod() {}
  }
}

mount(TestComponent, {
  stubs: {
    'my-stub': MyStub
  }
})
0 голосов
/ 24 октября 2018

Вы можете найти больше информации о заглушках в этом неофициальном руководстве по тестированию Vue.

https://lmiller1990.github.io/vue-testing-handbook/#what-is-this-guide

Короче говоря:

Заглушка простофрагмент кода, который заменяет другой.

Информация Vue Test Utils также содержит некоторую информацию о shallow mount:

https://vue -test-utils.vuejs.org/guides/#common-tips

В утилитах Vue Test Utilities не хватает контекста.

...