message: test(guards): test onBeforeRouteLeave are removed
diff: @@ -52,4 +52,46 @@ describe('onBeforeRouteLeave', () => {
  await router.push('/')
  expect(spy).toHaveBeenCalledTimes(1)
  })
  +
  + it('removes guards when leaving the route', async () => {
  + expect.assertions(3)
  + const spy = jest
  + .fn()
  + .mockImplementation(function (this: any, to, from, next) {
  + expect(typeof this.counter).toBe('number')
  + next()
  + })
  + const WithLeave = defineComponent({
  + template: `text`,
  + // we use data to check if the context is the right one because saving `this` in a variable logs a few warnings
  + data: () => ({ counter: 0 }),
  + setup() {
  + onBeforeRouteLeave(spy)
  + },
  + })
  +
  + const router = createRouter({
  + history: createMemoryHistory(),
  + routes: [
  + { path: '/', component },
  + { path: '/leave', component: WithLeave as any },
  + ],
  + })
  + const app = createApp({
  + template: `
  + <router-view />
  + `,
  + })
  + app.use(router)
  + const rootEl = document.createElement('div')
  + document.body.appendChild(rootEl)
  + app.mount(rootEl)
  +
  + await router.isReady()
  + await router.push('/leave')
  + await router.push('/')
  + await router.push('/leave')
  + await router.push('/')
  + expect(spy).toHaveBeenCalledTimes(2)
  + })
  })
  