Blog>
Snippets

Testing Components with Template Refs

Provide example tests showing how to use template refs when writing unit tests for Vue.js 3 components using a testing framework like Vue Test Utils.
import { ref } from 'vue';
import { mount } from '@vue/test-utils';
import MyComponent from './MyComponent.vue';

// The component definition
const Component = {
  template: `<button ref="myButton" @click="onClick">Click me!</button>`,
  setup() {
    const isClicked = ref(false);
    const onClick = () => {
      isClicked.value = true;
    };
    return { isClicked, onClick };
  }
};

// Test to check if the button is correctly referenced and can be clicked
describe('MyComponent', () => {
  it('button click should set isClicked to true', async () => {
    const wrapper = mount(Component);
    const button = wrapper.vm.$refs.myButton; // Access the template ref
    await button.trigger('click'); // Simulate button click
    expect(wrapper.vm.isClicked).toBe(true); // Check if the state is updated
  });
});
This code mounts the component using Vue Test Utils, accesses the button via the template ref, simulates a click event on the button, and then checks if the component's internal state is updated accordingly.