Skip to content

Commit a7a5112

Browse files
committed
add tests
1 parent 20fff64 commit a7a5112

File tree

8 files changed

+1448
-21
lines changed

8 files changed

+1448
-21
lines changed

babel.config.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module.exports = {
2+
presets: [
3+
[
4+
'@babel/preset-env',
5+
{
6+
targets: {
7+
node: 'current',
8+
},
9+
},
10+
],
11+
],
12+
}

package.json

+7
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,21 @@
88
"main": "dist/index.js",
99
"license": "MIT",
1010
"devDependencies": {
11+
"@babel/core": "^7.8.4",
12+
"@babel/preset-env": "^7.8.4",
1113
"@rollup/plugin-node-resolve": "^7.1.1",
14+
"@testing-library/jest-dom": "^5.1.1",
15+
"babel-jest": "^25.1.0",
16+
"dainte": "^0.1.2",
1217
"jest": "^25.1.0",
18+
"jsdom": "^16.1.0",
1319
"prettier": "^1.19.1",
1420
"rollup": "^1.31.1",
1521
"rollup-plugin-svelte": "^5.1.1",
1622
"svelte": "^3.0.0"
1723
},
1824
"dependencies": {
25+
"code-red": "^0.1.1",
1926
"lodash-es": "^4.0.0",
2027
"svelte": "^3.0.0"
2128
},

src/Sveltik.svelte

+40-2
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
let submitSuccessCount = 0
3535
3636
$: isValid = isEmpty(pickBy($errors))
37-
$: isDirty = isEqual($values, initialValues)
37+
$: isDirty = !isEqual($values, initialValues)
3838
3939
$: {
4040
if (enableReinitialize) {
@@ -72,7 +72,7 @@
7272
function setFieldTouched(field, isTouched, shouldValidate = validateOnBlur) {
7373
touched.update(_t => ({ ..._t, [field]: isTouched }))
7474
75-
if (shouldValidate) {
75+
if (isTouched && shouldValidate) {
7676
handleValidate()
7777
}
7878
}
@@ -300,4 +300,42 @@
300300
{handleInput}
301301
{handleReset}
302302
{handleSubmit}
303+
304+
props={{
305+
errors: $errors,
306+
touched: $touched,
307+
values: $values,
308+
warnings: $warnings,
309+
310+
isDirty,
311+
isSubmitting,
312+
isValid,
313+
isValidating,
314+
status,
315+
submitAttemptCount,
316+
submitFailureCount,
317+
submitSuccessCount,
318+
319+
resetForm,
320+
setErrors,
321+
setFieldError,
322+
setFieldTouched,
323+
setFieldValue,
324+
setFieldWarning,
325+
setStatus,
326+
setSubmitting,
327+
setTouched,
328+
setValues,
329+
setWarnings,
330+
submitFailure,
331+
submitForm,
332+
submitSuccess,
333+
validateField,
334+
validateForm,
335+
336+
handleBlur,
337+
handleInput,
338+
handleReset,
339+
handleSubmit,
340+
}}
303341
></slot>

tests/fixtures/hello-world.svelte

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script>
2+
import { Sveltik } from '../../src'
3+
4+
const initialValues = {
5+
name: 'world'
6+
}
7+
</script>
8+
9+
<Sveltik {initialValues} let:values>
10+
<div>Hello {values.name}</div>
11+
</Sveltik>

tests/fixtures/input.svelte

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<script>
2+
import { Sveltik, Form, Field, ErrorMessage } from '../../src'
3+
4+
let initialValues = {
5+
email: '',
6+
password: '',
7+
}
8+
9+
let validate = values => {
10+
const errors = {}
11+
if (!values.email) {
12+
errors.email = 'Required'
13+
} else if (
14+
!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(values.email)
15+
) {
16+
errors.email = 'Invalid email address'
17+
}
18+
return errors
19+
}
20+
21+
let onSubmit = (values) => new Promise((resolve, reject) => {
22+
resolve()
23+
})
24+
</script>
25+
26+
<Sveltik
27+
{initialValues}
28+
{validate}
29+
{onSubmit}
30+
let:isSubmitting
31+
>
32+
<Form>
33+
<Field type="email" name="email" />
34+
<ErrorMessage name="email" component="div" />
35+
<Field type="password" name="password" />
36+
<ErrorMessage name="password" component="div" />
37+
<button type="submit" disabled={isSubmitting}>
38+
Submit
39+
</button>
40+
</Form>
41+
</Sveltik>

tests/fixtures/state.svelte

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<script>
2+
import { Sveltik } from '../../src'
3+
4+
export let initialValues = {
5+
email: '',
6+
password: '',
7+
}
8+
</script>
9+
10+
<Sveltik
11+
{initialValues}
12+
let:props
13+
>
14+
<div id="__state">
15+
{JSON.stringify(props)}
16+
</div>
17+
</Sveltik>

0 commit comments

Comments
 (0)