@@ -416,8 +416,6 @@ describe('form-input', () => {
416416 expect ( wrapper . emitted ( 'input' ) . length ) . toEqual ( 1 )
417417 expect ( wrapper . emitted ( 'input' ) [ 0 ] [ 0 ] ) . toEqual ( 'test' )
418418
419- expect ( input . vm . localValue ) . toEqual ( 'test' )
420-
421419 wrapper . destroy ( )
422420 } )
423421
@@ -593,7 +591,7 @@ describe('form-input', () => {
593591 input . element . focus ( )
594592 input . trigger ( 'wheel' , { deltaY : 33.33 , deltaX : 0 , deltaZ : 0 , deltaMode : 0 } )
595593
596- // no-wheel=true will fire a blur event on the input when wheel fired
594+ // `: no-wheel=" true"` will fire a blur event on the input when wheel fired
597595 expect ( spy ) . toHaveBeenCalled ( )
598596
599597 wrapper . destroy ( )
@@ -620,7 +618,7 @@ describe('form-input', () => {
620618 input . element . focus ( )
621619 input . trigger ( 'wheel' , { deltaY : 33.33 , deltaX : 0 , deltaZ : 0 , deltaMode : 0 } )
622620
623- // no-wheel=false will not fire a blur event on the input when wheel fired
621+ // `: no-wheel=" false"` will not fire a blur event on the input when wheel fired
624622 expect ( spy ) . not . toHaveBeenCalled ( )
625623
626624 wrapper . destroy ( )
@@ -677,16 +675,16 @@ describe('form-input', () => {
677675 await waitNT ( wrapper . vm )
678676
679677 expect ( input . element . value ) . toBe ( '123.450' )
680- // Pre converted value as string
681- expect ( wrapper . emitted ( 'input' ) ) . toBeDefined ( )
682- expect ( wrapper . emitted ( 'input' ) . length ) . toBe ( 1 )
683- expect ( wrapper . emitted ( 'input' ) [ 0 ] . length ) . toEqual ( 1 )
684- expect ( wrapper . emitted ( 'input' ) [ 0 ] [ 0 ] ) . toEqual ( '123.450' )
685- // v-model update event (should emit a numerical value)
678+ // `v-model` update event (should emit a numerical value)
686679 expect ( wrapper . emitted ( 'update' ) ) . toBeDefined ( )
687680 expect ( wrapper . emitted ( 'update' ) . length ) . toBe ( 1 )
688681 expect ( wrapper . emitted ( 'update' ) [ 0 ] . length ) . toEqual ( 1 )
689682 expect ( wrapper . emitted ( 'update' ) [ 0 ] [ 0 ] ) . toBeCloseTo ( 123.45 )
683+ // Pre converted value as string (raw input value)
684+ expect ( wrapper . emitted ( 'input' ) ) . toBeDefined ( )
685+ expect ( wrapper . emitted ( 'input' ) . length ) . toBe ( 1 )
686+ expect ( wrapper . emitted ( 'input' ) [ 0 ] . length ) . toEqual ( 1 )
687+ expect ( wrapper . emitted ( 'input' ) [ 0 ] [ 0 ] ) . toEqual ( '123.450' )
690688
691689 // Update the input to be different string-wise, but same numerically
692690 input . element . value = '123.4500'
@@ -697,11 +695,11 @@ describe('form-input', () => {
697695 // Should emit a new input event
698696 expect ( wrapper . emitted ( 'input' ) . length ) . toEqual ( 2 )
699697 expect ( wrapper . emitted ( 'input' ) [ 1 ] [ 0 ] ) . toEqual ( '123.4500' )
700- // Should emit a new update event
701- expect ( wrapper . emitted ( 'update' ) . length ) . toBe ( 2 )
698+ // `v-model` value stays the same and update event shouldn't be emitted again
699+ expect ( wrapper . emitted ( 'update' ) . length ) . toBe ( 1 )
702700 expect ( wrapper . emitted ( 'update' ) [ 0 ] [ 0 ] ) . toBeCloseTo ( 123.45 )
703701
704- // Updating the v-model to new numeric value
702+ // Updating the ` v-model` to new numeric value
705703 wrapper . setProps ( {
706704 value : 45.6
707705 } )
@@ -711,6 +709,63 @@ describe('form-input', () => {
711709 wrapper . destroy ( )
712710 } )
713711
712+ it ( '"lazy" modifier prop works' , async ( ) => {
713+ const wrapper = mount ( BFormInput , {
714+ propsData : {
715+ type : 'text' ,
716+ lazy : true
717+ }
718+ } )
719+
720+ const input = wrapper . find ( 'input' )
721+ input . element . value = 'a'
722+ input . trigger ( 'input' )
723+ await waitNT ( wrapper . vm )
724+ expect ( input . element . value ) . toBe ( 'a' )
725+ // `v-model` update event should not have emitted
726+ expect ( wrapper . emitted ( 'update' ) ) . not . toBeDefined ( )
727+
728+ input . element . value = 'ab'
729+ input . trigger ( 'input' )
730+ await waitNT ( wrapper . vm )
731+ expect ( input . element . value ) . toBe ( 'ab' )
732+ // `v-model` update event should not have emitted
733+ expect ( wrapper . emitted ( 'update' ) ) . not . toBeDefined ( )
734+
735+ // trigger a change event
736+ input . trigger ( 'change' )
737+ await waitNT ( wrapper . vm )
738+ expect ( input . element . value ) . toBe ( 'ab' )
739+ // `v-model` update event should have emitted
740+ expect ( wrapper . emitted ( 'update' ) ) . toBeDefined ( )
741+ expect ( wrapper . emitted ( 'update' ) . length ) . toEqual ( 1 )
742+ expect ( wrapper . emitted ( 'update' ) [ 0 ] [ 0 ] ) . toBe ( 'ab' )
743+
744+ input . element . value = 'abc'
745+ input . trigger ( 'input' )
746+ await waitNT ( wrapper . vm )
747+ expect ( input . element . value ) . toBe ( 'abc' )
748+ // `v-model` update event should not have emitted new event
749+ expect ( wrapper . emitted ( 'update' ) . length ) . toEqual ( 1 )
750+
751+ input . element . value = 'abcd'
752+ input . trigger ( 'input' )
753+ await waitNT ( wrapper . vm )
754+ expect ( input . element . value ) . toBe ( 'abcd' )
755+ // `v-model` update event should not have emitted new event
756+ expect ( wrapper . emitted ( 'update' ) . length ) . toEqual ( 1 )
757+
758+ // Trigger a blur event
759+ input . trigger ( 'blur' )
760+ await waitNT ( wrapper . vm )
761+ expect ( input . element . value ) . toBe ( 'abcd' )
762+ // `v-model` update event should have emitted
763+ expect ( wrapper . emitted ( 'update' ) . length ) . toEqual ( 2 )
764+ expect ( wrapper . emitted ( 'update' ) [ 1 ] [ 0 ] ) . toBe ( 'abcd' )
765+
766+ wrapper . destroy ( )
767+ } )
768+
714769 it ( 'focus() and blur() methods work' , async ( ) => {
715770 const wrapper = mount ( BFormInput , {
716771 mountToDocument : true
0 commit comments