import { expect, test } from "vitest" import { computed, effect, signal, trigger } from "#Source/reactor/index.ts" /** * @description 这个测试文件应该与 https://github.com/stackblitz/alien-signals/blob/master/tests/trigger.spec.ts 保持同步。 */ test("should not throw when triggering with no dependencies", () => { trigger(() => { // no op }) }) test("should trigger updates for dependent computed signals", () => { const arr = signal(() => []) const length = computed(() => arr.get().length) expect(length.get()).toBe(0) arr.get().push(1) expect(length.get()).toBe(0) trigger(() => { arr.get() }) expect(length.get()).toBe(1) }) test("should trigger updates for the second source signal", () => { const src1 = signal(() => []) const src2 = signal(() => []) const length = computed(() => src2.get().length) expect(length.get()).toBe(0) src2.get().push(1) expect(length.get()).toBe(0) trigger(() => { src1.get() src2.get() }) expect(length.get()).toBe(1) }) test("should trigger effect once", () => { const src1 = signal(() => []) const src2 = signal(() => []) let effectRunTimes = 0 effect(() => { effectRunTimes = effectRunTimes + 1 src1.get() src2.get() }) expect(effectRunTimes).toBe(1) trigger(() => { src1.get() src2.get() }) expect(effectRunTimes).toBe(2) }) test("should not notify the trigger function sub", () => { const src1 = signal(() => []) const src2 = computed(() => src1.get()) effect(() => { src1.get() src2.get() }) trigger(() => { src1.get() src2.get() }) })