Vue.js 为什么Jest spyOn()只通过了其中一个测试,但在另一个测试中失败了?

Vue.js 为什么Jest spyOn()只通过了其中一个测试,但在另一个测试中失败了?,vue.js,jestjs,vue-test-utils,Vue.js,Jestjs,Vue Test Utils,我有一个vue子组件: <NavbarSnap title="Select Recipient" data-testid="navbarsnap" v-on:change-screen-handler="onHandleChangeScreen('SnapRecepient')" :hasSearch="true" :hasInvite=&qu

我有一个vue子组件:

    <NavbarSnap
      title="Select Recipient"
      data-testid="navbarsnap"
      v-on:change-screen-handler="onHandleChangeScreen('SnapRecepient')"
      :hasSearch="true"
      :hasInvite="true"
      :groupName="getSelectedChannel.CNM"
      v-on:search-input="handleSearchInputChange"
    />
测试失败,因为尚未调用
jest.fn()

两个spyed-on函数都在同一个套件中测试,工作正常(尽管这在这里并不重要)。两个测试都以相同的方式抓取组件,并以相同的方式从子组件发射。我不明白为什么一次考试通过,一次考试失败


有什么想法吗?

区别在于事件处理程序的注册方式:

v-on:change-screen-handler="onHandleChangeScreen('SnapRecepient')"

前者根据组件实例计算表达式,并不限于方法。后者使用
handleSearchInputChange
方法作为事件处理程序,这需要在组件实例化之前对其进行监视:

let spy = jest.spyOn(Component.methods, "handleSearchInputChange");
const wrapper = factory();
...
它应该是
v-on:search input=“handleSearchInputChange()”
以确保一致性。这允许监视类似于
onHandleChangeScreen
的实例:

let spy = jest.spyOn(wrapper.vm, "handleSearchInputChange");
...

在任何情况下,我都不建议监视你应该测试的东西——测试行为,这些方法做什么?这能回答你的问题吗?
let spy = jest.spyOn(Component.methods, "handleSearchInputChange");
const wrapper = factory();
...
let spy = jest.spyOn(wrapper.vm, "handleSearchInputChange");
...