From 1fab88512bc9f5025cc2d4eb05755bc6a8c9ceae Mon Sep 17 00:00:00 2001 From: David Hu Date: Sun, 21 Feb 2021 14:31:33 -0800 Subject: [PATCH] Refactor ClipLoader to use shared specs --- __tests__/ClipLoader-tests.tsx | 80 +++---------------- .../__snapshots__/ClipLoader-tests.tsx.snap | 2 +- 2 files changed, 12 insertions(+), 70 deletions(-) diff --git a/__tests__/ClipLoader-tests.tsx b/__tests__/ClipLoader-tests.tsx index c91bc509..e61a11f4 100644 --- a/__tests__/ClipLoader-tests.tsx +++ b/__tests__/ClipLoader-tests.tsx @@ -1,97 +1,39 @@ import * as React from "react"; import { mount, ReactWrapper } from "enzyme"; -import { matchers } from '@emotion/jest'; +import { matchers } from "@emotion/jest"; expect.extend(matchers); import ClipLoader from "../src/ClipLoader"; -import { LoaderSizeProps } from "../src/interfaces"; import { sizeDefaults } from "../src/helpers"; +import { commonSpecs, cssSpecs, lengthSpecs } from "./sharedSpecs"; describe("ClipLoader", () => { - let loader: ReactWrapper; - let props: LoaderSizeProps; const defaultColor = "#000000"; const defaultSize = 35; const defaultUnit = "px"; - it("should match snapshot", () => { - loader = mount(); - expect(loader).toMatchSnapshot(); - }); - - it("should contain default props if no props are passed", () => { - props = loader.props(); - expect(props).toEqual(sizeDefaults(defaultSize)); - }); + commonSpecs(ClipLoader, sizeDefaults(defaultSize)); + cssSpecs(ClipLoader); it("parent span should contain styles created using default props", () => { + const loader = mount(); expect(loader).toHaveStyleRule("height", `${defaultSize}${defaultUnit}`); expect(loader).toHaveStyleRule("width", `${defaultSize}${defaultUnit}`); expect(loader).toHaveStyleRule("border-color", defaultColor); }); - it("should render null if loading prop is set as false", () => { - loader = mount(); - expect(loader.isEmptyRender()).toBe(true); - }); - it("should render the correct color based on prop", () => { const color = "#e2e2e2"; - loader = mount(); + const loader = mount(); expect(loader).not.toHaveStyleRule("border-color", defaultColor); expect(loader).toHaveStyleRule("border-color", color); }); - it("should render the correct size based on props", () => { - const size = 18; - loader = mount(); + const sizeExpectStatements = (loader: ReactWrapper, length: number, unit?: string) => { expect(loader).not.toHaveStyleRule("height", `${defaultSize}${defaultUnit}`); expect(loader).not.toHaveStyleRule("width", `${defaultSize}${defaultUnit}`); - expect(loader).toHaveStyleRule("height", `${size}${defaultUnit}`); - expect(loader).toHaveStyleRule("width", `${size}${defaultUnit}`); - }); - - describe("size props", () => { - it("should render the size with px unit when size is a number", () => { - const size = 18; - loader = mount(); - expect(loader).not.toHaveStyleRule("height", `${defaultSize}${defaultUnit}`); - expect(loader).not.toHaveStyleRule("width", `${defaultSize}${defaultUnit}`); - expect(loader).toHaveStyleRule("height", `${size}${defaultUnit}`); - expect(loader).toHaveStyleRule("width", `${size}${defaultUnit}`); - }); - - it("should render the size as is when size is a string with valid css unit", () => { - const size = "18px"; - loader = mount(); - expect(loader).not.toHaveStyleRule("height", `${defaultSize}${defaultUnit}`); - expect(loader).not.toHaveStyleRule("width", `${defaultSize}${defaultUnit}`); - expect(loader).toHaveStyleRule("height", `${size}`); - expect(loader).toHaveStyleRule("width", `${size}`); - }); - - it("should render the size with default unit of px when the unit is incorrect", () => { - const length = 18; - const unit = "ad"; - const size = `${length}${unit}`; - loader = mount(); - expect(loader).not.toHaveStyleRule("height", `${defaultSize}${defaultUnit}`); - expect(loader).not.toHaveStyleRule("width", `${defaultSize}${defaultUnit}`); - expect(loader).toHaveStyleRule("height", `${length}${defaultUnit}`); - expect(loader).toHaveStyleRule("width", `${length}${defaultUnit}`); - }); - }); - - it("should render the css override based on props", () => { - loader = mount( - - ); - expect(loader).not.toHaveStyleRule("position", "relative"); - expect(loader).not.toHaveStyleRule("width", `${defaultSize}${defaultUnit}`); - expect(loader).not.toHaveStyleRule("height", `${defaultSize}${defaultUnit}`); - expect(loader).toHaveStyleRule("position", "absolute"); - expect(loader).toHaveStyleRule("width", "100px"); - expect(loader).toHaveStyleRule("height", "200px"); - expect(loader).toHaveStyleRule("color", "blue"); - }); + expect(loader).toHaveStyleRule("height", `${length}${unit || defaultUnit}`); + expect(loader).toHaveStyleRule("width", `${length}${unit || defaultUnit}`); + }; + lengthSpecs(ClipLoader, "size", sizeExpectStatements); }); diff --git a/__tests__/__snapshots__/ClipLoader-tests.tsx.snap b/__tests__/__snapshots__/ClipLoader-tests.tsx.snap index 2045546d..782d2a0e 100644 --- a/__tests__/__snapshots__/ClipLoader-tests.tsx.snap +++ b/__tests__/__snapshots__/ClipLoader-tests.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ClipLoader should match snapshot 1`] = ` +exports[`ClipLoader common specs should match snapshot 1`] = ` @keyframes animation-0 { 0% { -webkit-transform: rotate(0deg) scale(1);