monday-ui-react-core
Version:
Official monday.com UI resources for application development in React.js
64 lines (52 loc) • 1.79 kB
JavaScript
import React from "react";
import { fireEvent, render, cleanup } from "@testing-library/react";
import { act } from "@testing-library/react-hooks";
import Toast from "../Toast";
jest.useFakeTimers();
const renderComponent = ({ ...props } = {}, contenct = "") => {
return render(<Toast {...props}>{contenct}</Toast>);
};
describe("<Toast />", () => {
afterEach(() => {
cleanup();
});
it("renders nothing when open=false", () => {
const toast = renderComponent({}, "text");
expect(toast.queryByText("text")).toBeNull();
});
it("renders toast when open=true", () => {
const toast = renderComponent({ open: true }, "text");
expect(toast.queryByText("text")).not.toBeNull();
});
it("rendres action", () => {
const action = <div>my action</div>;
const toast = renderComponent({ open: true, action }, "text");
expect(toast.queryByText("my action")).not.toBeNull();
});
it("don't renders close button if closeable=false", () => {
const toast = renderComponent({ open: true, closeable: false }, "text");
expect(toast.queryByLabelText("close-toast")).toBeNull();
});
it("calls onClose when click on close button", () => {
const onCloseMock = jest.fn();
const toast = renderComponent({
open: true,
onClose: onCloseMock
});
const closeButton = toast.getByLabelText("close-toast");
act(() => {
fireEvent.click(closeButton);
});
expect(onCloseMock.mock.calls.length).toBe(1);
});
it("calls onClose after 1S when autoHideDuration=1000", () => {
const onCloseMock = jest.fn();
renderComponent({
onClose: onCloseMock,
autoHideDuration: 1000,
open: true
});
jest.advanceTimersByTime(1000);
expect(onCloseMock.mock.calls.length).toBe(1);
});
});