import React from "react";
import { render } from "@testing-library/react";
import { MobileOnly, PhoneOnly, TabletOnly, DesktopOnly } from "../MediaOnly";
import AppSizeListener from "../AppSizeListener";
import { DEFAULT_DESKTOP_MIN_WIDTH } from "../constants";
const onchange = jest.fn();
const addListener = jest.fn();
const addEventListener = jest.fn();
const removeListener = jest.fn();
const removeEventListener = jest.fn();
const dispatchEvent = jest.fn();
beforeAll(() => {
// matchMedia doesn't exist in tests, but maybe one day it'll be supported
// so polyfill only when it doesn't exist
window.matchMedia =
window.matchMedia ||
((query) => ({
matches: query.includes(`${DEFAULT_DESKTOP_MIN_WIDTH}`),
media: "",
onchange,
addListener,
removeListener,
addEventListener,
removeEventListener,
dispatchEvent,
}));
});
beforeEach(() => {
jest.clearAllMocks();
});
describe("MediaOnly", () => {
it("should throw an error if any of the components are mounted without an AppSizeListener parent", () => {
const consoleError = jest.spyOn(console, "error");
// hide React uncaught error message
consoleError.mockImplementation();
expect(() =>
render(
Hello
)
).toThrow();
expect(() =>
render(
Hello
)
).not.toThrow();
expect(() =>
render(
Hello
)
).toThrow();
expect(() =>
render(
Hello
)
).not.toThrow();
expect(() =>
render(
Hello
)
).toThrow();
expect(() =>
render(
Hello
)
).not.toThrow();
expect(() =>
render(
Hello
)
).toThrow();
expect(() =>
render(
Hello
)
).not.toThrow();
});
});