]> git.ipfire.org Git - thirdparty/vuejs/router.git/commitdiff
test: add tests for in component guards
authorEduardo San Martin Morote <posva13@gmail.com>
Mon, 16 Mar 2020 15:25:14 +0000 (16:25 +0100)
committerEduardo San Martin Morote <posva13@gmail.com>
Mon, 16 Mar 2020 15:25:14 +0000 (16:25 +0100)
__tests__/guards/component-beforeRouteEnter.spec.ts
__tests__/guards/component-beforeRouteLeave.spec.ts
__tests__/guards/component-beforeRouteUpdate.spec.ts
__tests__/lazyLoading.spec.ts

index cf129633ca79222789cd85a0a5b137833796bb09..f807b67bc880066b214a7c025dfb63a5d2307a6e 100644 (file)
@@ -116,7 +116,7 @@ beforeEach(() => {
   resetMocks()
 })
 
-describe.skip('beforeRouteEnter', () => {
+describe('beforeRouteEnter', () => {
   beforeAll(() => {
     createDom()
   })
@@ -192,25 +192,6 @@ describe.skip('beforeRouteEnter', () => {
         expect(router.currentRoute.value.fullPath).not.toBe('/named')
       })
 
-      // TODO: async components
-      it.skip('resolves async components before guarding', async () => {
-        const spy = jest.fn(noGuard)
-        const component = {
-          template: `<div></div>`,
-          beforeRouteEnter: spy,
-        }
-        const [promise, resolve] = fakePromise<typeof component>()
-        const router = createRouter({
-          routes: [...routes, { path: '/async', component: () => promise }],
-        })
-        const pushPromise = router[navigationMethod]('/async')
-        expect(spy).not.toHaveBeenCalled()
-        resolve(component)
-        await pushPromise
-
-        expect(spy).toHaveBeenCalledTimes(1)
-      })
-
       it('does not call beforeRouteEnter if we were already on the page', async () => {
         const router = createRouter({ routes })
         beforeRouteEnter.mockImplementation(noGuard)
index c008f7e45519be72d6da316e71a6c26abc4d458b..99d4c913f757785960ab9dab568ab624d77ec2eb 100644 (file)
@@ -98,7 +98,7 @@ beforeEach(() => {
   resetMocks()
 })
 
-describe.skip('beforeRouteLeave', () => {
+describe('beforeRouteLeave', () => {
   beforeAll(() => {
     createDom()
   })
@@ -167,26 +167,6 @@ describe.skip('beforeRouteLeave', () => {
         expect(nested.nestedNestedFoo).toHaveBeenCalledTimes(1)
       })
 
-      // TODO: implem async components
-      it.skip('works when a lazy loaded component', async () => {
-        const router = createRouter({
-          routes: [
-            ...routes,
-            {
-              path: '/lazy',
-              component: () => Promise.resolve({ ...Foo, beforeRouteLeave }),
-            },
-          ],
-        })
-        beforeRouteLeave.mockImplementationOnce((to, from, next) => {
-          next()
-        })
-        await router.push('/lazy')
-        expect(beforeRouteLeave).not.toHaveBeenCalled()
-        await router[navigationMethod]('/foo')
-        expect(beforeRouteLeave).toHaveBeenCalledTimes(1)
-      })
-
       it('can cancel navigation', async () => {
         const router = createRouter({ routes })
         beforeRouteLeave.mockImplementationOnce(async (to, from, next) => {
index 6ffc1ba9c93836aa664479e77c9a1f976e13edec..211decbfcfee3acb0ce417d95cc17dcd690960d4 100644 (file)
@@ -34,7 +34,7 @@ beforeEach(() => {
   beforeRouteUpdate.mockReset()
 })
 
-describe.skip('beforeRouteUpdate', () => {
+describe('beforeRouteUpdate', () => {
   beforeAll(() => {
     createDom()
   })
@@ -51,25 +51,6 @@ describe.skip('beforeRouteUpdate', () => {
         expect(beforeRouteUpdate).toHaveBeenCalledTimes(1)
       })
 
-      // TODO: add async component
-      it.skip('resolves async components before guarding', async () => {
-        const spy = jest.fn((to, from, next) => next())
-        const component = {
-          template: `<div></div>`,
-          beforeRouteUpdate: spy,
-        }
-        const router = createRouter({
-          routes: [
-            ...routes,
-            { path: '/async/:a', component: () => Promise.resolve(component) },
-          ],
-        })
-        await router[navigationMethod]('/async/a')
-        expect(spy).not.toHaveBeenCalled()
-        await router[navigationMethod]('/async/b')
-        expect(spy).toHaveBeenCalledTimes(1)
-      })
-
       it('waits before navigating', async () => {
         const [promise, resolve] = fakePromise()
         const router = createRouter({ routes })
index 86684a4fe235ab797bce564c512a534b16cd1424..df75c71dc4e79d26bd85f2a9854d879bf871144b 100644 (file)
@@ -192,6 +192,47 @@ describe('Lazy Loading', () => {
     expect(spy).toHaveBeenCalledTimes(1)
   })
 
+  it('beforeRouteLeave works on a lazy loaded component', async () => {
+    const { promise, resolve } = createLazyComponent()
+    const spy = jest.fn((to, from, next) => next())
+    const component = jest.fn(() =>
+      promise.then(() => ({ beforeRouteLeave: spy }))
+    )
+    const { router } = newRouter({
+      routes: [
+        { path: '/foo', component },
+        { path: '/', component: {} },
+      ],
+    })
+
+    resolve()
+    await router.push('/foo')
+    expect(component).toHaveBeenCalledTimes(1)
+    expect(spy).toHaveBeenCalledTimes(0)
+
+    await router.push('/')
+    expect(spy).toHaveBeenCalledTimes(1)
+  })
+
+  it('beforeRouteUpdate works on a lazy loaded component', async () => {
+    const { promise, resolve } = createLazyComponent()
+    const spy = jest.fn((to, from, next) => next())
+    const component = jest.fn(() =>
+      promise.then(() => ({ beforeRouteUpdate: spy }))
+    )
+    const { router } = newRouter({
+      routes: [{ path: '/:id', component }],
+    })
+
+    resolve()
+    await router.push('/foo')
+    expect(component).toHaveBeenCalledTimes(1)
+    expect(spy).toHaveBeenCalledTimes(0)
+
+    await router.push('/bar')
+    expect(spy).toHaveBeenCalledTimes(1)
+  })
+
   it('aborts the navigation if async fails', async () => {
     const { component, reject } = createLazyComponent()
     const { router } = newRouter({