From e38edd488704faa540b292186a293954e93984b6 Mon Sep 17 00:00:00 2001 From: Dominik Zogg Date: Wed, 15 Apr 2020 22:01:28 +0200 Subject: [PATCH] optimize create, read, update tests (mocking) --- .../Component/Page/Pet/Create.test.tsx | 29 +++++++---- .../Component/Page/Pet/List.test.tsx | 6 +-- .../Component/Page/Pet/Read.test.tsx | 25 ++++++---- .../Component/Page/Pet/Update.test.tsx | 50 ++++++++++++------- 4 files changed, 68 insertions(+), 42 deletions(-) diff --git a/src/__tests__/Component/Page/Pet/Create.test.tsx b/src/__tests__/Component/Page/Pet/Create.test.tsx index 10a44fa..79ae2e8 100644 --- a/src/__tests__/Component/Page/Pet/Create.test.tsx +++ b/src/__tests__/Component/Page/Pet/Create.test.tsx @@ -2,22 +2,29 @@ import React from 'react'; import { createMemoryHistory } from 'history'; import { fireEvent, render } from '@testing-library/react'; import { Router } from 'react-router-dom'; -import * as ApiClientPet from '../../../../ApiClient/Pet'; import Create from '../../../../Component/Page/Pet/Create'; import HttpError from '../../../../Model/Error/HttpError'; import PetFormProps from '../../../../Component/Form/PetFormProps'; -import PetResponse from '../../../../Model/Pet/PetResponse'; +import PetRequest from '../../../../Model/Pet/PetRequest'; import UnprocessableEntity from '../../../../Model/Error/UnprocessableEntity'; -jest.mock('../../../../ApiClient/Pet'); +let mockCreatePet = (pet: PetRequest) => { }; + +jest.mock('../../../../ApiClient/Pet', () => { + return { + CreatePet: jest.fn((pet: PetRequest) => { + return mockCreatePet(pet); + }) + }; +}); jest.mock('../../../../Component/Form/PetForm', () => { return ({ submitPet }: PetFormProps) => { - const submit = async () => { - await submitPet({ name: '', vaccinations: [] }); + const onSubmit = () => { + submitPet({ name: 'Brownie' }); }; - return (); + return (); }; }); @@ -48,9 +55,9 @@ test('default', () => { }); test('unprocessable entity', async () => { - ApiClientPet.CreatePet.mockResolvedValueOnce(new Promise((resolve) => { - resolve(new UnprocessableEntity({ title: 'title' })); - })); + mockCreatePet = async (pet: PetRequest) => { + return new Promise((resolve) => resolve(new UnprocessableEntity({ title: 'title' }))); + }; const history = createMemoryHistory(); @@ -79,9 +86,9 @@ test('unprocessable entity', async () => { }); test('successful', async () => { - ApiClientPet.CreatePet.mockImplementationOnce((pet: PetResponse) => { + mockCreatePet = async (pet: PetRequest) => { return new Promise((resolve) => resolve(pet)); - }); + }; const history = createMemoryHistory(); diff --git a/src/__tests__/Component/Page/Pet/List.test.tsx b/src/__tests__/Component/Page/Pet/List.test.tsx index ea8bd5b..ef8083f 100644 --- a/src/__tests__/Component/Page/Pet/List.test.tsx +++ b/src/__tests__/Component/Page/Pet/List.test.tsx @@ -19,11 +19,11 @@ jest.mock('../../../../ApiClient/Pet'); jest.mock('../../../../Component/Form/PetFilterForm', () => { return ({ submitPetFilter }: PetFilterFormProps) => { - const submit = async () => { - await submitPetFilter({ name: 'Bro' }); + const onSubmit = () => { + submitPetFilter({ name: 'Bro' }); }; - return (); + return (); }; }); diff --git a/src/__tests__/Component/Page/Pet/Read.test.tsx b/src/__tests__/Component/Page/Pet/Read.test.tsx index c0e65b5..2460592 100644 --- a/src/__tests__/Component/Page/Pet/Read.test.tsx +++ b/src/__tests__/Component/Page/Pet/Read.test.tsx @@ -2,14 +2,21 @@ import React from 'react'; import { createMemoryHistory } from 'history'; import { render } from '@testing-library/react'; import { Router } from 'react-router-dom'; -import * as ApiClientPet from '../../../../ApiClient/Pet'; import HttpError from '../../../../Model/Error/HttpError'; import NotFound from '../../../../Model/Error/NotFound'; import PetResponse from '../../../../Model/Pet/PetResponse'; import Read from '../../../../Component/Page/Pet/Read'; import Vaccination from '../../../../Model/Pet/Vaccination'; -jest.mock('../../../../ApiClient/Pet'); +let mockReadPet = (id: string) => { }; + +jest.mock('../../../../ApiClient/Pet', () => { + return { + ReadPet: jest.fn((id: string) => { + return mockReadPet(id); + }) + }; +}); jest.mock('../../../../Component/Partial/HttpError', () => { return ({ httpError }: { httpError: HttpError; }) => { @@ -18,9 +25,9 @@ jest.mock('../../../../Component/Partial/HttpError', () => { }); test('not found', async () => { - ApiClientPet.ReadPet.mockResolvedValueOnce(new Promise((resolve) => { - resolve(new NotFound({ title: 'title' })); - })); + mockReadPet = async (id: string) => { + return new Promise((resolve) => resolve(new NotFound({ title: 'title' }))); + }; const history = createMemoryHistory(); @@ -55,9 +62,9 @@ test('minimal', async () => { name: 'Brownie' }); - ApiClientPet.ReadPet.mockImplementationOnce(() => { + mockReadPet = async (id: string) => { return new Promise((resolve) => resolve(pet)); - }); + }; const history = createMemoryHistory(); @@ -113,9 +120,9 @@ test('maximal', async () => { ] }); - ApiClientPet.ReadPet.mockImplementationOnce(() => { + mockReadPet = async (id: string) => { return new Promise((resolve) => resolve(pet)); - }); + }; const history = createMemoryHistory(); diff --git a/src/__tests__/Component/Page/Pet/Update.test.tsx b/src/__tests__/Component/Page/Pet/Update.test.tsx index 67ac0b9..963be73 100644 --- a/src/__tests__/Component/Page/Pet/Update.test.tsx +++ b/src/__tests__/Component/Page/Pet/Update.test.tsx @@ -2,24 +2,36 @@ import React from 'react'; import { createMemoryHistory } from 'history'; import { render, fireEvent } from '@testing-library/react'; import { Router } from 'react-router-dom'; -import * as ApiClientPet from '../../../../ApiClient/Pet'; import HttpError from '../../../../Model/Error/HttpError'; import NotFound from '../../../../Model/Error/NotFound'; import PetFormProps from '../../../../Component/Form/PetFormProps'; +import PetRequest from '../../../../Model/Pet/PetRequest'; import PetResponse from '../../../../Model/Pet/PetResponse'; import UnprocessableEntity from '../../../../Model/Error/UnprocessableEntity'; import Update from '../../../../Component/Page/Pet/Update'; import Vaccination from '../../../../Model/Pet/Vaccination'; -jest.mock('../../../../ApiClient/Pet'); +let mockReadPet = (id: string) => { }; +let mockUpdatePet = (id: string, pet: PetRequest) => { }; + +jest.mock('../../../../ApiClient/Pet', () => { + return { + ReadPet: jest.fn((id: string) => { + return mockReadPet(id); + }), + UpdatePet: jest.fn((id: string, pet: PetRequest) => { + return mockUpdatePet(id, pet); + }) + }; +}); jest.mock('../../../../Component/Form/PetForm', () => { return ({ submitPet }: PetFormProps) => { - const submit = async () => { - await submitPet({ name: '', vaccinations: [] }); + const onSubmit = () => { + submitPet({ name: 'Brownie' }); }; - return (); + return (); }; }); @@ -30,9 +42,9 @@ jest.mock('../../../../Component/Partial/HttpError', () => { }); test('not found', async () => { - ApiClientPet.ReadPet.mockResolvedValueOnce(new Promise((resolve) => { - resolve(new NotFound({ title: 'title' })); - })); + mockReadPet = async (id: string) => { + return new Promise((resolve) => resolve(new NotFound({ title: 'title' }))); + }; const history = createMemoryHistory(); @@ -68,9 +80,9 @@ test('minimal', async () => { name: 'Brownie' }); - ApiClientPet.ReadPet.mockImplementationOnce(() => { + mockReadPet = async (id: string) => { return new Promise((resolve) => resolve(pet)); - }); + }; const history = createMemoryHistory(); @@ -110,13 +122,13 @@ test('unprocessable entity', async () => { ] }); - ApiClientPet.ReadPet.mockImplementationOnce(() => { + mockReadPet = async (id: string) => { return new Promise((resolve) => resolve(pet)); - }); + }; - ApiClientPet.UpdatePet.mockResolvedValueOnce(new Promise((resolve) => { - resolve(new UnprocessableEntity({ title: 'title' })); - })); + mockUpdatePet = async (id: string, pet: PetRequest) => { + return new Promise((resolve) => resolve(new UnprocessableEntity({ title: 'title' }))); + }; const history = createMemoryHistory(); @@ -161,13 +173,13 @@ test('successful', async () => { ] }); - ApiClientPet.ReadPet.mockImplementationOnce(() => { + mockReadPet = async (id: string) => { return new Promise((resolve) => resolve(pet)); - }); + }; - ApiClientPet.UpdatePet.mockImplementationOnce((pet: PetResponse) => { + mockUpdatePet = async (id: string, pet: PetRequest) => { return new Promise((resolve) => resolve(pet)); - }); + }; const history = createMemoryHistory();