Skip to content

Commit 36ccef8

Browse files
committed
test: guard effect regression samples
1 parent ee093e4 commit 36ccef8

File tree

4 files changed

+79
-0
lines changed

4 files changed

+79
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { expect, vi } from 'vitest';
2+
import { test } from '../../test';
3+
import { flushSync } from 'svelte';
4+
5+
const trackBranch = vi.fn();
6+
7+
export default test({
8+
mode: ['client'],
9+
props: { trackBranch: trackBranch },
10+
async test({ target }) {
11+
const button = target.querySelector('button');
12+
13+
flushSync(() => button?.click());
14+
flushSync(() => button?.click());
15+
flushSync(() => button?.click());
16+
flushSync(() => button?.click());
17+
18+
expect(trackBranch).toHaveBeenCalledWith('one');
19+
expect(trackBranch).toHaveBeenCalledWith('two');
20+
expect(trackBranch).not.toHaveBeenCalledWith('else');
21+
}
22+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<script lang="ts">
2+
import {untrack} from 'svelte';
3+
4+
const {trackBranch}:{trackBranch: (branch:string)=>void} = $props();
5+
6+
let b = $state(false);
7+
let v = $state("two");
8+
9+
10+
$effect(() => {
11+
v = b ? "one" : "two";
12+
})
13+
</script>
14+
15+
16+
<button onclick={() => b = !b}>Trigger</button>
17+
18+
19+
{#if v === "one"}
20+
<div>if1 matched! {trackBranch('one')}</div>
21+
{:else if v === "two"}
22+
<div>if2 matched! {trackBranch('two')}</div>
23+
{:else}
24+
<div>nothing matched {trackBranch('else')}</div>
25+
{/if}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { test } from '../../test';
2+
import { flushSync } from 'svelte';
3+
4+
export default test({
5+
mode: ['client'],
6+
async test({ target, assert }) {
7+
const button = target.querySelector('button');
8+
9+
flushSync(() => button?.click());
10+
11+
assert.equal(target.textContent?.trim(), 'Trigger');
12+
}
13+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<script>
2+
let centerRow = $state({ nested: { optional: 2, required: 3 } },
3+
);
4+
5+
let someChange = $state(false);
6+
$effect(() => {
7+
if (someChange) centerRow = undefined;
8+
});
9+
</script>
10+
11+
{#if centerRow?.nested}
12+
{#if centerRow?.nested?.optional != undefined && centerRow.nested.optional > 0}
13+
op: {centerRow.nested.optional}<br />
14+
{:else}
15+
req: {centerRow.nested.required}<br />
16+
{/if}
17+
{/if}
18+
19+
<button onclick={() => (someChange = true)}>Trigger</button>

0 commit comments

Comments
 (0)