Тестирование компонентов svelte с помощью svelte / store - PullRequest
0 голосов
/ 01 апреля 2020

При тестировании компонентов svelte с использованием jest & @ testing-library / svelte состояние распределяется между тестами, можно ли его разрушать после каждого теста, поэтому у меня больше изолированных модульных тестов.

store / theme

import { writable } from "svelte/store";

export const LOCAL_STORAGE_KEY = "current:theme";

export const THEMES = {
  DARK: "dark",
  LIGHT: "light"
};

export const MATCH_DARK_THEME = "(prefers-color-scheme: dark)";

export const IS_USER_PREFERNCE_DARK =
  window.matchMedia && window.matchMedia(MATCH_DARK_THEME).matches;

export const DEFAULT_THEME =
  localStorage.getItem(LOCAL_STORAGE_KEY) || IS_USER_PREFERNCE_DARK
    ? THEMES.DARK
    : THEMES.LIGHT;

export const theme = writable(DEFAULT_THEME);

, поскольку нет DI, хранилище совместно используется между тестами, я мог бы сбросить значение по умолчанию в beforeEach, но попытался выяснить, есть ли лучшее решение.

ThemeSwitcher.spe c. js

it("should be change body class on click", async () => {
  const { container } = render(ThemeSwitcher);

  expect(container.className).toEqual("theme-light");

  await fireEvent.click(getButton(container));

  expect(container.className).toEqual("theme-dark");
});

it("should render the sun if in light mode", async () => {
  const { getByText } = render(ThemeSwitcher);
  //default should be light mode but returns dark.
  const sun = getByText("Light theme on: Sun");

  expect(sun).toBeTruthy();
});
...