Add App.test.tsx
This commit is contained in:
parent
d06d7d4389
commit
e498c5b6e2
4 changed files with 78 additions and 2 deletions
|
@ -3,7 +3,7 @@ import React from "react";
|
||||||
export function ErrorRenderer({ error }: {error: Error}) {
|
export function ErrorRenderer({ error }: {error: Error}) {
|
||||||
const t = chrome.i18n.getMessage;
|
const t = chrome.i18n.getMessage;
|
||||||
return (
|
return (
|
||||||
<div className="error">
|
<div data-testid="error" className="error">
|
||||||
<span>{t("error")}</span>:
|
<span>{t("error")}</span>:
|
||||||
<span> {error.message}</span>
|
<span> {error.message}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -13,7 +13,7 @@ export function ResponseRenderer({ response }: {response: TResponse}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="response">
|
<div data-testid="response" className="response">
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div>{t("ip_address")}</div>
|
<div>{t("ip_address")}</div>
|
||||||
<div>{response.IPAddress}</div>
|
<div>{response.IPAddress}</div>
|
||||||
|
|
47
test/App.test.tsx
Normal file
47
test/App.test.tsx
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
import React from "react";
|
||||||
|
import '@testing-library/jest-dom'
|
||||||
|
import { render, screen, act, waitFor } from "@testing-library/react";
|
||||||
|
import { App } from "~/components/App";
|
||||||
|
import { getMessage } from "./mocks/chrome.i18n";
|
||||||
|
import { success, error, loading } from "./mocks/fetch";
|
||||||
|
|
||||||
|
describe("App.tsx", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
const chrome: any = {i18n: {getMessage}};
|
||||||
|
global.chrome = chrome;
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
global.chrome = undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("when the request is loading", () => {
|
||||||
|
beforeEach(() => { global.fetch = loading });
|
||||||
|
afterEach(() => { global.fetch = undefined });
|
||||||
|
|
||||||
|
test("loading text is rendered", () => {
|
||||||
|
render(<App/>);
|
||||||
|
expect(screen.getByText("Loading...")).toBeInTheDocument();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("when the request is a success", () => {
|
||||||
|
beforeEach(() => { global.fetch = success });
|
||||||
|
afterEach(() => { global.fetch = undefined });
|
||||||
|
|
||||||
|
test("response is rendered", async () => {
|
||||||
|
await act(() => render(<App/>));
|
||||||
|
expect(screen.getByTestId("response")).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("when the request throws an error", () => {
|
||||||
|
beforeEach(() => { global.fetch = error });
|
||||||
|
afterEach(() => { global.fetch = undefined });
|
||||||
|
|
||||||
|
test("error is rendered", async () => {
|
||||||
|
await act(() => render(<App/>));
|
||||||
|
expect(screen.getByTestId("error")).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
29
test/mocks/fetch.ts
Normal file
29
test/mocks/fetch.ts
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import {TServerResponse} from "~/lib/response";
|
||||||
|
|
||||||
|
export function success(_path: RequestInfo | URL, _options?: RequestInit) {
|
||||||
|
const json = () => (
|
||||||
|
new Promise<TServerResponse>((resolve) => (
|
||||||
|
resolve({
|
||||||
|
YourFuckingIPAddress: "127.0.0.1",
|
||||||
|
YourFuckingISP: "FooBar Ltd",
|
||||||
|
YourFuckingCity: "Foo City",
|
||||||
|
YourFuckingCountry: "United States of FooBar",
|
||||||
|
YourFuckingTorExit: false
|
||||||
|
})
|
||||||
|
)
|
||||||
|
))
|
||||||
|
|
||||||
|
return new Promise<any>((resolve) => {
|
||||||
|
resolve({status: 200, json});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export function error(_path: RequestInfo | URL, _options?: RequestInit) {
|
||||||
|
return new Promise<any>(() => {
|
||||||
|
throw new Error("Request error");
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
export function loading(_path: RequestInfo | URL, _options?: RequestInit) {
|
||||||
|
return new Promise<any>(() => null);
|
||||||
|
}
|
Loading…
Reference in a new issue