Как проверить наблюдателя Vue, который следит за вычисленным свойством из VueX?

Предположим, у меня есть следующий компонент:

import { mapState } from 'vuex';
import externalDependency from '...';

export default {
  name: 'Foo',
  computed: {
    ...mapState(['bar'])
  },
  watch: {
    bar () {
     externalDependency.doThing(this.bar);
    }
  }
}

При тестировании я хочу убедиться, что externalDependency.doThing() вызывается с bar (который происходит из состояния vuex) следующим образом:

it('should call externalDependency.doThing with bar', () => {
  const wrapper = mount(Foo);
  const spy = jest.spyOn(externalDependency, 'doThing');

  wrapper.setComputed({bar: 'baz'});

  expect(spy).toHaveBeenCalledWith('baz');
});

Vue test-utils имеет метод setComputed, который позволяет мне в настоящее время тестировать его, но я продолжаю получать предупреждения о том, что setComputed скоро будет удалено, и я не знаю, как еще это можно проверить:

https://github.com/vuejs/vue-test-utils/issues/331

Ответы

Ответ 1

Вам понадобится какой-то мутатор в экземпляре VueX, да, это действительно вводит в тест другой не связанный модуль, но лично по вашему тесту, включая использование Vuex, эта концепция уже была нарушена.

Изменение состояния неожиданным образом более подвержено поведению, которое отличается от фактического использования.