1+ /**
2+ * Здесь проверяется очистка event из формы после уничтожения поля
3+ * */
4+ import { FormField , Form , useFormState , useFormValues } from "../../src" ;
5+ import { mount } from "@vue/test-utils" ;
6+ import { defineComponent , ref } from "vue" ;
7+
8+
9+ describe ( "Clean event handlers" , ( ) => {
10+ test ( "count of event should be empty when form was created" , ( ) => {
11+ const form = new Form ( ) ;
12+ expect ( Object . keys ( form . events ) . length ) . toBe ( 0 )
13+ } )
14+ test ( "Add/Remove input should add 2 events and then remove them" , async ( ) => {
15+ const component = defineComponent ( {
16+ props : {
17+ show : {
18+ type : Boolean
19+ }
20+ } ,
21+ template : `<div><form-field name = "age" v-if = "show"/></div>` ,
22+ components : { FormField} ,
23+ data : ( ) => ( {
24+ form : new Form ( )
25+ } )
26+ } )
27+
28+ const app = mount ( component , {
29+ attachTo : document . body
30+ } ) as any
31+
32+ const form = app . vm . form as Form
33+
34+ expect ( Object . keys ( form . events ) . length ) . toBe ( 0 )
35+ await app . setProps ( { show : true } )
36+
37+ expect ( Object . keys ( form . events ) . length ) . toBe ( 2 )
38+ expect ( Object . keys ( form . events [ Form . getEventValueByName ( 'age' ) ] ) . length ) . toBe ( 1 )
39+ expect ( Object . keys ( form . events [ Form . getEventAvailabilityByName ( 'age' ) ] ) . length ) . toBe ( 1 )
40+
41+ await app . setProps ( { show : false } )
42+
43+ expect ( Object . keys ( form . events [ Form . getEventValueByName ( 'age' ) ] ) . length ) . toBe ( 0 )
44+ expect ( Object . keys ( form . events [ Form . getEventAvailabilityByName ( 'age' ) ] ) . length ) . toBe ( 0 )
45+
46+ } )
47+ test ( "useFormState should clean hooks after component was removed" , async ( ) => {
48+
49+ const ComponentWithHook = defineComponent ( {
50+ template : `<div> </div>` ,
51+ setup ( ) {
52+ const form = Form . getParentForm ( ) as Form ;
53+ const formState = useFormState ( form ) ;
54+ }
55+ } )
56+
57+ const app = mount ( {
58+ props : {
59+ show : {
60+ type : Boolean
61+ }
62+ } ,
63+ template : `<div><ComponentWithHook v-if = "show"/></div>` ,
64+ components : { ComponentWithHook} ,
65+ data : ( ) => ( {
66+ form : new Form ( )
67+ } )
68+ } , {
69+ attachTo : document . body
70+ } ) as any
71+
72+ const form = app . vm . form as Form ;
73+
74+ expect ( Object . keys ( form . events ) . length ) . toBe ( 0 ) ;
75+ await app . setProps ( {
76+ show : true
77+ } )
78+ expect ( Object . keys ( form . events ) . length ) . toBe ( 3 ) ;
79+
80+ expect ( Object . keys ( form . events [ Form . EVENT_WAIT ] ) . length ) . toBe ( 1 ) ;
81+ expect ( Object . keys ( form . events [ Form . EVENT_CHANGED ] ) . length ) . toBe ( 1 ) ;
82+ expect ( Object . keys ( form . events [ Form . EVENT_AVAILABLE ] ) . length ) . toBe ( 1 ) ;
83+
84+ await app . setProps ( {
85+ show : false
86+ } )
87+ expect ( Object . keys ( form . events [ Form . EVENT_WAIT ] ) . length ) . toBe ( 0 ) ;
88+ expect ( Object . keys ( form . events [ Form . EVENT_CHANGED ] ) . length ) . toBe ( 0 ) ;
89+ expect ( Object . keys ( form . events [ Form . EVENT_AVAILABLE ] ) . length ) . toBe ( 0 ) ;
90+ } )
91+ test ( "useFormValues should clean hooks after component was removed" , async ( ) => {
92+
93+ const ComponentWithHook = defineComponent ( {
94+ template : `<div> </div>` ,
95+ setup ( ) {
96+ const form = Form . getParentForm ( ) as Form ;
97+ const values = useFormValues ( form ) ;
98+ }
99+ } )
100+
101+ const app = mount ( {
102+ props : {
103+ show : {
104+ type : Boolean
105+ }
106+ } ,
107+ template : `<div><ComponentWithHook v-if = "show"/></div>` ,
108+ components : { ComponentWithHook} ,
109+ data : ( ) => ( {
110+ form : new Form ( )
111+ } )
112+ } , {
113+ attachTo : document . body
114+ } ) as any
115+
116+ const form = app . vm . form as Form ;
117+
118+ expect ( Object . keys ( form . events ) . length ) . toBe ( 0 ) ;
119+ await app . setProps ( {
120+ show : true
121+ } )
122+ expect ( Object . keys ( form . events ) . length ) . toBe ( 1 ) ;
123+ await app . setProps ( {
124+ show : false
125+ } )
126+
127+ expect ( form . events [ Form . EVENT_VALUE ] . length ) . toBe ( 0 ) ;
128+ } )
129+ } )
0 commit comments