|
1 |
| -import { effectScope, nextTick, reactive, ref, watch } from 'vue-demi' |
| 1 | +import { computed, effectScope, nextTick, reactive, ref, watch } from 'vue-demi' |
2 | 2 | import { describe, expect, it, vi } from 'vitest'
|
3 | 3 | import type { Ref } from 'vue-demi'
|
4 | 4 | import { useRouteParams } from '.'
|
@@ -216,6 +216,28 @@ describe('useRouteParams', () => {
|
216 | 216 | expect(onUpdate).not.toHaveBeenCalled()
|
217 | 217 | })
|
218 | 218 |
|
| 219 | + it('should trigger effects only once', async () => { |
| 220 | + const route = getRoute() |
| 221 | + const router = { replace: (r: any) => Object.assign(route, r) } as any |
| 222 | + const onUpdate = vi.fn() |
| 223 | + |
| 224 | + const page = useRouteParams('page', 1, { transform: Number, route, router }) |
| 225 | + const pageObj = computed(() => ({ |
| 226 | + page: page.value, |
| 227 | + })) |
| 228 | + |
| 229 | + watch(pageObj, onUpdate) |
| 230 | + |
| 231 | + page.value = 2 |
| 232 | + |
| 233 | + await nextTick() |
| 234 | + await nextTick() |
| 235 | + |
| 236 | + expect(page.value).toBe(2) |
| 237 | + expect(route.params.page).toBe(2) |
| 238 | + expect(onUpdate).toHaveBeenCalledTimes(1) |
| 239 | + }) |
| 240 | + |
219 | 241 | it('should keep current query and hash', async () => {
|
220 | 242 | let route = getRoute()
|
221 | 243 | const router = { replace: (r: any) => route = r } as any
|
|
0 commit comments