[unit test] How to correctly assert a function is called?

I am new to unit test about vue. I am stuck when I tried to accomplish a click event test.
Here is my component.
Message.vue
<template> <li class="message" style="margin-top:10px" @click="handleClick">{{message}}</li> </template>

<script>
export default {
    name: "Message",
    methods: {
        handleClick() {
            console.log("ABC!");
            this.$emit("message-clicked", this.message);
        }
    }
},
props: {
    message: {
        type: String,
        required: true,
        validator: message => message.length > 1
    }
}
</script>

And my test spec is
Message.spec.js:

import { mount } from "@vue/test-utils";
import Message from "../../src/components/Message.vue"

const createCmp = propsData => mount(Message, { propsData });

describe("Message.spec.js", ()=>{
    it("calls handleClick when click on message", async () => {
        const cmp = createCmp({ message: "Cat" });
        const spy = jest.spyOn(cmp.vm, "handleClick");

        cmp.trigger("click");

        await cmp.vm.$nextTick();

        expect(spy).toHaveBeenCalled();
    })
})

I have vue-cli installed with jest being selected.
But every time I run the test, it says that

Expected mock function to have been called, but it was not called.

引用