Ну, это трудно определить без кода вашего компонента. Ваш тестовый код выглядит вполне нормально, однако я никогда не использовал опцию sync: true
.
У меня есть два предположения:
- Вы должны предоставить функцию макета через
methods
,
как:
cost generatePhone = jest.fn();
const wrapper = mount(RandomPhoneNumber, {
localVue,
sync: false,
methods: {
generatePhone,
}
})
const spy = jest.fn()
wrapper.vm.generatePhone = spy
const button = wrapper.find('.btn-generate')
button.trigger('click')
expect(generatePhone).toHaveBeenCalled()
Обратите внимание, что я ожидаю против generatePhone
, не имея доступа к нему через wrapper.vm
. Я не знаю, почему это происходит, но у меня были проблемы с использованием шутки при доступе через оболочку,
- Кроме того, вам может потребоваться дождаться вызова,
как:
const generatePhone = jest.fn();
const wrapper = mount(RandomPhoneNumber, {
localVue,
sync: false,
methods: {
generatePhone,
}
})
const spy = jest.fn()
wrapper.vm.generatePhone = spy
const button = wrapper.find('.btn-generate')
button.trigger('click')
await Promise.resolve()
expect(generatePhone).toHaveBeenCalled()
done() // this have to be passed as the 'it' function handler as a parameter: https://jestjs.io/docs/en/asynchronous.html
Я не совсем уверен насчет второго, но так как вы передаете sync
как ложь, вам, возможно, придется подождать следующего тика для вызова метода, я не знаю, так как это зависит от внутренних органов Vue.