Skip to content

Commit 828adeb

Browse files
authored
Test <Form /> component (#112)
1 parent d052c7e commit 828adeb

File tree

1 file changed

+64
-2
lines changed

1 file changed

+64
-2
lines changed

tests/components/Form.test.js

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,71 @@
11
import * as React from 'react'
22
import TestRenderer from 'react-test-renderer'
33
import { Form } from '../../src'
4+
import { lastCallArg } from './utils'
45

56
test('<Form />', () => {
67
const renderFn = jest.fn().mockReturnValue(null)
7-
TestRenderer.create(<Form render={renderFn} />)
8-
// TODO
8+
TestRenderer.create(
9+
<Form initial={{ prop1: '1', prop2: '2' }} render={renderFn} />
10+
)
11+
12+
expect(renderFn).toBeCalledTimes(1)
13+
expect(renderFn).lastCalledWith(
14+
expect.objectContaining({ values: { prop1: '1', prop2: '2' } })
15+
)
16+
17+
expect(lastCallArg(renderFn).input('prop1')).toEqual(
18+
expect.objectContaining({
19+
value: '1',
20+
bind: expect.objectContaining({ value: '1' }),
21+
})
22+
)
23+
expect(lastCallArg(renderFn).input('prop2')).toEqual(
24+
expect.objectContaining({
25+
value: '2',
26+
bind: expect.objectContaining({ value: '2' }),
27+
})
28+
)
29+
30+
lastCallArg(renderFn)
31+
.input('prop1')
32+
.set('10')
33+
lastCallArg(renderFn)
34+
.input('prop2')
35+
.bind.onChange({ target: { value: '20' } })
36+
37+
expect(lastCallArg(renderFn).input('prop1')).toEqual(
38+
expect.objectContaining({
39+
value: '10',
40+
bind: expect.objectContaining({ value: '10' }),
41+
})
42+
)
43+
expect(lastCallArg(renderFn).input('prop2')).toEqual(
44+
expect.objectContaining({
45+
value: '20',
46+
bind: expect.objectContaining({ value: '20' }),
47+
})
48+
)
49+
})
50+
51+
test('<Form onChange />', () => {
52+
const renderFn = jest.fn().mockReturnValue(null)
53+
const onChangeFn = jest.fn()
54+
TestRenderer.create(
55+
<Form initial={{ prop: '1' }} onChange={onChangeFn} render={renderFn} />
56+
)
57+
58+
expect(onChangeFn).toBeCalledTimes(0)
59+
60+
lastCallArg(renderFn)
61+
.input('prop')
62+
.set('10')
63+
expect(onChangeFn).toBeCalledTimes(1)
64+
expect(onChangeFn).lastCalledWith({ prop: '10' })
65+
66+
lastCallArg(renderFn)
67+
.input('prop')
68+
.bind.onChange({ target: { value: '100' } })
69+
expect(onChangeFn).toBeCalledTimes(2)
70+
expect(onChangeFn).lastCalledWith({ prop: '100' })
971
})

0 commit comments

Comments
 (0)