switch to vitest and get some actual results!

This commit is contained in:
Chris Kruining 2025-02-19 15:55:59 +11:00
parent 4a367d2457
commit 3ef8940137
No known key found for this signature in database
GPG key ID: EB894A3560CCCAD2
9 changed files with 246 additions and 36 deletions

View file

@ -1,15 +1,44 @@
import { describe, it, expect } from 'bun:test';
import { describe, expect } from 'vitest';
import { render } from "@solidjs/testing-library"
import { Table } from './table';
import { createDataSet } from './dataset';
import { createDataSet } from '~/features/dataset';
import { createSignal } from 'solid-js';
import { it } from '~/test-helpers';
type TableItem = {};
describe('`<Table />`', () => {
it('should render', async () => {
const result = render(() => {
const [data] = createSignal([]);
const dataset = createDataSet(data);
// describe('<Table />', () => {
// it('should render', async () => {
// const dataset = createDataSet<TableItem>([]);
// const result = render(() => <Table rows={dataset} columns={[]} />);
return <Table rows={dataset} columns={[]} />;
});
// expect(true).toBe(true);
// });
// });
expect(true).toBe(true);
});
it('should render with groups', async () => {
const result = render(() => {
const [data] = createSignal([
{ id: '1', name: 'a first name', amount: 30, group: 'a' },
{ id: '2', name: 'a second name', amount: 20, group: 'a' },
{ id: '3', name: 'a third name', amount: 10, group: 'a' },
{ id: '4', name: 'a first name', amount: 30, group: 'b' },
{ id: '5', name: 'a second name', amount: 20, group: 'b' },
{ id: '6', name: 'a third name', amount: 10, group: 'b' },
]);
const dataset = createDataSet(data, {
group: { by: 'group' }
});
return <Table rows={dataset} columns={[
{ id: 'id', label: 'id' },
{ id: 'name', label: 'name' },
{ id: 'amount', label: 'amount' },
{ id: 'group', label: 'group' },
]} />;
});
expect(true).toBe(true);
});
});

View file

@ -1,6 +1,10 @@
import { describe, expect, it } from "bun:test";
// import { describe, expect, it } from "bun:test";
import "@testing-library/jest-dom/vitest";
import { createDataSet } from "./index";
import { createSignal } from "solid-js";
import { createEffect, createSignal } from "solid-js";
import { testEffect, } from "@solidjs/testing-library";
import { describe, expect } from "vitest";
import { it } from '~/test-helpers';
interface DataEntry {
id: string;
@ -49,6 +53,40 @@ describe('dataset', () => {
expect(actual).toEqual(expect.objectContaining({ value: defaultData() }))
});
it('update if the source value changes', () => {
const [data, setData] = createSignal([
{ id: '1', name: 'a first name', amount: 30 },
{ id: '2', name: 'a second name', amount: 20 },
{ id: '3', name: 'a third name', amount: 10 },
]);
const dataset = createDataSet(data);
dataset.mutateEach(item => ({ ...item, amount: item.amount * 2 }))
return testEffect(done =>
createEffect((run: number = 0) => {
data();
if (run === 0) {
setData([
{ id: '4', name: 'a first name', amount: 30 },
{ id: '5', name: 'a second name', amount: 20 },
{ id: '6', name: 'a third name', amount: 10 },
]);
} else if (run === 1) {
expect(dataset.value).toEqual([
{ id: '4', name: 'a first name', amount: 60 },
{ id: '5', name: 'a second name', amount: 40 },
{ id: '6', name: 'a third name', amount: 20 },
])
done()
}
return run + 1
})
);
});
describe('mutate', () => {
it('mutates the value', async () => {
// Arrange

View file

@ -1,5 +1,5 @@
import { Accessor, createEffect, createMemo, untrack } from "solid-js";
import { createStore, produce } from "solid-js/store";
import { createStore } from "solid-js/store";
import { CustomPartial } from "solid-js/store/types/store.js";
import { deepCopy, deepDiff, MutarionKind, Mutation } from "~/utilities";

14
src/test-helpers.ts Normal file
View file

@ -0,0 +1,14 @@
import { createRoot } from 'solid-js';
import { it as vit } from 'vitest';
export const it = (name: string, fn: () => any) => {
return vit(name, () => {
return createRoot(async (cleanup) => {
const res = await fn();
cleanup();
return res;
});
})
}

View file

@ -1,6 +1,9 @@
import { describe, beforeEach, it, expect, afterAll, spyOn } from 'bun:test';
import { afterAll, beforeEach, describe, expect, vi } from 'vitest';
import { decode, deepCopy, deepDiff, filter, gen__split_by_filter, map, MutarionKind, split_by_filter, splitAt } from './utilities';
import { install } from '@sinonjs/fake-timers';
import { it } from '~/test-helpers';
const { spyOn } = vi;
type MilliSeconds = number;
const useFakeTimers = () => {