Skip to content

Commit bfdb444

Browse files
committed
test: improve unit testing
1 parent a5f76d7 commit bfdb444

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1688
-310
lines changed

test/useForm.test.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ describe('useForm()', () => {
2424
await result.current.submit()
2525
})
2626

27-
expect(result.current.values.username).toBeUndefined()
27+
expect(result.current.values.username).toBe(undefined)
2828
})
2929
})
3030

@@ -196,7 +196,7 @@ describe('useForm()', () => {
196196
expect(validate).not.toHaveBeenCalled()
197197
expect(result.current.submitted).toBe(true)
198198
expect(result.current.submitting).toBe(false)
199-
expect(result.current.submitError).toBeUndefined()
199+
expect(result.current.submitError).toBe(undefined)
200200
expect(result.current.submitResult).toMatchObject(initialValues)
201201
})
202202
})
@@ -217,10 +217,10 @@ describe('useForm()', () => {
217217

218218
expect(result.current.initialized).toBe(true)
219219
expect(result.current.modified).toBe(false)
220-
expect(result.current.modifiedFields.username).toBeUndefined()
220+
expect(result.current.modifiedFields.username).toBe(undefined)
221221
expect(result.current.touched).toBe(false)
222-
expect(result.current.touchedFields.username).toBeUndefined()
223-
expect(result.current.values.username).toBeUndefined()
222+
expect(result.current.touchedFields.username).toBe(undefined)
223+
expect(result.current.values.username).toBe(undefined)
224224
})
225225
})
226226

@@ -237,7 +237,7 @@ describe('useForm()', () => {
237237
result.current.clearErrors()
238238
})
239239

240-
expect(result.current.errors.username).toBeUndefined()
240+
expect(result.current.errors.username).toBe(undefined)
241241
})
242242
})
243243

@@ -255,7 +255,7 @@ describe('useForm()', () => {
255255
})
256256

257257
expect(result.current.touched).toBe(false)
258-
expect(result.current.touchedFields.username).toBeUndefined()
258+
expect(result.current.touchedFields.username).toBe(undefined)
259259
})
260260
})
261261

@@ -469,7 +469,7 @@ describe('useForm()', () => {
469469
expect(result.current.initialized).toBe(true)
470470
expect(result.current.getInitialValue('username')).toBe(initialValues.username)
471471
expect(result.current.loading).toBe(false)
472-
expect(result.current.loadError).toBeUndefined()
472+
expect(result.current.loadError).toBe(undefined)
473473
})
474474

475475
// todo
@@ -508,10 +508,10 @@ describe('useForm()', () => {
508508
result.current.removeFields(['username'])
509509
})
510510

511-
expect(result.current.values.username).toBeUndefined()
512-
expect(result.current.errors.username).toBeUndefined()
513-
expect(result.current.modifiedFields.username).toBeUndefined()
514-
expect(result.current.touchedFields.username).toBeUndefined()
511+
expect(result.current.values.username).toBe(null)
512+
expect(result.current.errors.username).toBe(undefined)
513+
expect(result.current.modifiedFields.username).toBe(undefined)
514+
expect(result.current.touchedFields.username).toBe(undefined)
515515
})
516516
})
517517

@@ -667,7 +667,7 @@ describe('useForm()', () => {
667667
})
668668

669669
expect(result.current.values.username).toBe('jalik')
670-
expect(result.current.values.password).toBeUndefined()
670+
expect(result.current.values.password).toBe(undefined)
671671
})
672672
})
673673

@@ -736,7 +736,7 @@ describe('useForm()', () => {
736736
expect(onSubmit).toHaveBeenCalledTimes(1)
737737
expect(result.current.submitted).toBe(true)
738738
expect(result.current.submitting).toBe(false)
739-
expect(result.current.submitError).toBeUndefined()
739+
expect(result.current.submitError).toBe(undefined)
740740
expect(result.current.submitResult).toBe(true)
741741
})
742742

@@ -778,7 +778,7 @@ describe('useForm()', () => {
778778
await result.current.submit()
779779
})
780780

781-
expect(result.current.submitResult).toBeUndefined()
781+
expect(result.current.submitResult).toBe(undefined)
782782
expect(result.current.submitting).toBe(false)
783783
expect(result.current.submitted).toBe(false)
784784
expect(result.current.submitError).toBeDefined()
@@ -842,7 +842,7 @@ describe('useForm()', () => {
842842
expect(result.current.errors.username).toBeDefined()
843843
expect(result.current.validating).toBe(false)
844844
expect(result.current.validated).toBe(false)
845-
expect(result.current.validateError).toBeUndefined()
845+
expect(result.current.validateError).toBe(undefined)
846846
})
847847

848848
it('should catch error during validation and set form.validateError', async () => {
@@ -881,10 +881,10 @@ describe('useForm()', () => {
881881
})
882882

883883
expect(validate).toHaveBeenCalledTimes(1)
884-
expect(result.current.errors.username).toBeUndefined()
884+
expect(result.current.errors.username).toBe(undefined)
885885
expect(result.current.validating).toBe(false)
886886
expect(result.current.validated).toBe(true)
887-
expect(result.current.validateError).toBeUndefined()
887+
expect(result.current.validateError).toBe(undefined)
888888
})
889889
})
890890

test/useForm/clear.test.ts

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,45 @@ import { act, renderHook } from '@testing-library/react'
88
import useForm, { FormMode } from '../../src/useForm'
99

1010
function tests (mode: FormMode) {
11-
it('should clear all values', () => {
12-
const hook = renderHook(() => useForm({
13-
mode,
14-
initialModified: { a: true }
15-
}))
16-
expect(hook.result.current.isModified()).toBe(true)
11+
describe('without arguments', () => {
12+
it('should clear all values', () => {
13+
const hook = renderHook(() => useForm({
14+
mode,
15+
initialValues: {
16+
a: 1,
17+
b: 2
18+
}
19+
}))
20+
expect(hook.result.current.getValue('a')).toBe(1)
21+
expect(hook.result.current.getValue('b')).toBe(2)
22+
act(() => hook.result.current.clear())
23+
expect(hook.result.current.getValues()).toStrictEqual({})
24+
})
25+
})
1726

18-
act(() => hook.result.current.clear())
19-
expect(hook.result.current.isModified()).toBe(false)
27+
describe('with paths', () => {
28+
it('should clear values of given paths', () => {
29+
const hook = renderHook(() => useForm({
30+
mode,
31+
initialValues: {
32+
a: 1,
33+
b: 2,
34+
c: 3
35+
}
36+
}))
37+
expect(hook.result.current.getValue('a')).toBe(1)
38+
expect(hook.result.current.getValue('b')).toBe(2)
39+
expect(hook.result.current.getValue('c')).toBe(3)
40+
act(() => hook.result.current.clear(['a', 'c']))
41+
expect(hook.result.current.getValue('a')).toBe(null)
42+
expect(hook.result.current.getValue('b')).toBe(2)
43+
expect(hook.result.current.getValue('c')).toBe(null)
44+
})
2045
})
46+
47+
// todo check that errors are cleared
48+
// todo check that modified states are cleared
49+
// todo check that touched states are cleared
2150
}
2251

2352
describe('useForm({ mode: "controlled" }).clear()', () => {

test/useForm/clearErrors.test.ts

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,34 @@ import { describe, expect, it } from '@jest/globals'
88
import { act, renderHook } from '@testing-library/react'
99

1010
function test (mode: FormMode) {
11-
it('should clear errors', () => {
12-
const hook = renderHook(() => useForm({
13-
mode,
14-
initialErrors: {
15-
a: 'invalid',
16-
b: 'invalid'
17-
},
18-
onSubmit () {
19-
return Promise.resolve(true)
20-
}
21-
}))
22-
act(() => hook.result.current.clearErrors())
23-
expect(hook.result.current.errors).toStrictEqual({})
11+
describe('without arguments', () => {
12+
it('should clear all errors', () => {
13+
const hook = renderHook(() => useForm({
14+
mode,
15+
initialErrors: {
16+
a: 'invalid',
17+
b: 'invalid'
18+
}
19+
}))
20+
expect(hook.result.current.getError('a')).toBe('invalid')
21+
expect(hook.result.current.getError('b')).toBe('invalid')
22+
act(() => hook.result.current.clearErrors())
23+
expect(hook.result.current.errors).toStrictEqual({})
24+
})
25+
})
26+
27+
describe('with paths', () => {
28+
it('should clear given errors', () => {
29+
const hook = renderHook(() => useForm({
30+
mode,
31+
initialErrors: {
32+
a: 'invalid',
33+
b: 'invalid'
34+
}
35+
}))
36+
act(() => hook.result.current.clearErrors())
37+
expect(hook.result.current.errors).toStrictEqual({})
38+
})
2439
})
2540
}
2641

test/useForm/clearTouchedFields.test.ts

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,35 @@ import { act, renderHook } from '@testing-library/react'
88
import useForm, { FormMode } from '../../src/useForm'
99

1010
function tests (mode: FormMode) {
11-
it('should clear touched fields', () => {
12-
const hook = renderHook(() => useForm({
13-
mode,
14-
initialTouched: { a: true }
15-
}))
16-
expect(hook.result.current.isTouched()).toBe(true)
11+
describe('without arguments', () => {
12+
it('should clear all touched fields', () => {
13+
const hook = renderHook(() => useForm({
14+
mode,
15+
initialTouched: { a: true }
16+
}))
17+
expect(hook.result.current.isTouched('a')).toBe(true)
18+
act(() => hook.result.current.clearTouchedFields())
19+
expect(hook.result.current.isTouched('a')).toBe(false)
20+
})
21+
})
1722

18-
act(() => hook.result.current.clearTouchedFields())
19-
expect(hook.result.current.isTouched()).toBe(false)
23+
describe('with paths', () => {
24+
it('should clear touched fields', () => {
25+
const hook = renderHook(() => useForm({
26+
mode,
27+
initialTouched: {
28+
a: true,
29+
b: true,
30+
c: true
31+
}
32+
}))
33+
expect(hook.result.current.isTouched('a')).toBe(true)
34+
expect(hook.result.current.isTouched('b')).toBe(true)
35+
act(() => hook.result.current.clearTouchedFields(['a', 'c']))
36+
expect(hook.result.current.isTouched('a')).toBe(false)
37+
expect(hook.result.current.isTouched('b')).toBe(true)
38+
expect(hook.result.current.isTouched('c')).toBe(false)
39+
})
2040
})
2141
}
2242

test/useForm/disabled.test.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* This file is licensed under the MIT License (MIT)
3+
* Copyright (c) 2025 Karl STEIN
4+
*/
5+
6+
import { describe, expect, it } from '@jest/globals'
7+
import { renderHook } from '@testing-library/react'
8+
import useForm, { FormMode } from '../../src/useForm'
9+
10+
function test (mode: FormMode) {
11+
const initialValues = { a: 1 }
12+
it('should return true if options.disabled = true', () => {
13+
const hook = renderHook(() => useForm({
14+
mode,
15+
initialValues,
16+
disabled: true
17+
}))
18+
expect(hook.result.current.disabled).toBe(true)
19+
})
20+
21+
it('should return true if options.disabled = false', () => {
22+
const hook = renderHook(() => useForm({
23+
mode,
24+
initialValues,
25+
disabled: false
26+
}))
27+
expect(hook.result.current.disabled).toBe(false)
28+
})
29+
30+
it('should return true if form is not initialized', () => {
31+
const hook = renderHook(() => useForm({
32+
mode
33+
}))
34+
expect(hook.result.current.disabled).toBe(true)
35+
})
36+
37+
// todo test disabled when submitting
38+
}
39+
40+
describe('useForm({ mode : "controlled" }).disabled', () => {
41+
test('controlled')
42+
})
43+
44+
describe('useForm({ mode: "uncontrolled" }).disabled', () => {
45+
test('experimental_uncontrolled')
46+
})

test/useForm/errors.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* This file is licensed under the MIT License (MIT)
3+
* Copyright (c) 2025 Karl STEIN
4+
*/
5+
6+
import { describe, expect, it } from '@jest/globals'
7+
import { renderHook } from '@testing-library/react'
8+
import useForm, { FormMode } from '../../src/useForm'
9+
10+
function test (mode: FormMode) {
11+
it('should return all errors', () => {
12+
const initialErrors = {
13+
a: 'invalid',
14+
b: 'required'
15+
}
16+
const hook = renderHook(() => useForm({
17+
mode,
18+
initialErrors
19+
}))
20+
expect(hook.result.current.errors).toStrictEqual(initialErrors)
21+
})
22+
}
23+
24+
describe('useForm({ mode : "controlled" }).errors', () => {
25+
test('controlled')
26+
})
27+
28+
describe('useForm({ mode: "uncontrolled" }).errors', () => {
29+
test('experimental_uncontrolled')
30+
})

0 commit comments

Comments
 (0)