release: WRNexusJS 0.3.0
This commit is contained in:
@@ -1,17 +1,47 @@
|
||||
import { expect, test } from "bun:test";
|
||||
import { signal } from "../src/index.ts";
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { batch, computed, effect, signal } from "../src/index.ts";
|
||||
|
||||
test("signal skips equal writes and supports safe unsubscribe during notification", () => {
|
||||
const count = signal(0);
|
||||
const seen: number[] = [];
|
||||
let off = () => {};
|
||||
off = count.subscribe((value) => {
|
||||
seen.push(value);
|
||||
off();
|
||||
describe("reactive primitives", () => {
|
||||
test("signals skip no-op updates", () => {
|
||||
const value = signal(1);
|
||||
const seen: number[] = [];
|
||||
value.subscribe((next) => seen.push(next));
|
||||
value.set(1);
|
||||
value.set(2);
|
||||
expect(seen).toEqual([2]);
|
||||
});
|
||||
|
||||
test("batch coalesces notifications", () => {
|
||||
const value = signal(0);
|
||||
const seen: number[] = [];
|
||||
value.subscribe((next) => seen.push(next));
|
||||
batch(() => {
|
||||
value.set(1);
|
||||
value.set(2);
|
||||
value.set(3);
|
||||
});
|
||||
expect(seen).toEqual([3]);
|
||||
});
|
||||
|
||||
test("computed values and effects track dependencies", () => {
|
||||
const count = signal(2);
|
||||
const doubled = computed(() => count.get() * 2);
|
||||
const seen: number[] = [];
|
||||
const dispose = effect(() => {
|
||||
seen.push(doubled.get());
|
||||
});
|
||||
count.set(3);
|
||||
dispose();
|
||||
count.set(4);
|
||||
expect(seen).toEqual([4, 6]);
|
||||
});
|
||||
|
||||
test("effects ignore accidental non-function return values", () => {
|
||||
const value = signal(0);
|
||||
const seen: number[] = [];
|
||||
const dispose = effect(() => seen.push(value.get()) as unknown as void);
|
||||
value.set(1);
|
||||
dispose();
|
||||
expect(seen).toEqual([0, 1]);
|
||||
});
|
||||
count.set(0);
|
||||
count.update((value) => value + 1);
|
||||
count.set(2);
|
||||
expect(seen).toEqual([1]);
|
||||
expect(count.get()).toBe(2);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user