solid-primitive-test-util
TypeScript icon, indicating that this package has built-in type declarations

0.1.1 • Public • Published

solid-primitive-test-util

Simple Solid primitive unit test utility.

Install

pnpm add solid-primitive-test-util -D

Example

Basic Usage

Let's say we have the following primitive to be tested:

import { createSignal } from 'solid-js';

export const createCounter = () => {
  const [count, setCount] = createSignal(0);
  const increment = () => setCount((prev) => prev + 1);
  return { count, increment };
};

You can test it by wrapping with renderPrimitive helper. The return value of renderPrimitive includes result property that is the result of the primitive function:

import { renderPrimitive } from 'solid-primitive-test-util';
import { createCounter } from './counter';

test('should increment count', () => {
  const { result } = renderPrimitive(() => createCounter());

  expect(result.count()).toBe(0);
  result.increment();
  expect(result.count()).toBe(1);
});

Wrapped Components

Sometimes, primitives may need access to values or functionality outside of itself that are provided by a context provider or some other HOC.

import { createSignal, createContext, useContext } from 'solid-js';

const CounterStepContext = createContext(1);

export const CounterStepProvider = (props) => (
  <CounterStepContext.Provider value={props.step}>{props.children}</CounterStepContext.Provider>
);

export const createCounter = (initialValue = 0) => {
  const [count, setCount] = createSignal(initialValue);
  const step = useContext(CounterStepContext);
  const increment = () => setCount((prev) => prev + step);
  return { count, increment };
};

In our test, we simply use CounterStepProvider as the wrapper when rendering the primitive:

import { renderPrimitive } from 'solid-primitive-test-util';
import { CounterStepProvider, creatCounter } from './counter';

test('should use custom step when incrementing', () => {
  const wrapper = (props) => <CounterStepProvider step={2}>{props.children}</CounterStepProvider>;
  const { result } = renderHook(() => creatCounter(), { wrapper });
  result.increment();
  expect(result.count()).toBe(2);
});

License

MIT

Package Sidebar

Install

npm i solid-primitive-test-util

Weekly Downloads

2

Version

0.1.1

License

MIT

Unpacked Size

12.9 kB

Total Files

7

Last publish

Collaborators

  • wobsoriano