Feat Sticky, ScrollNavBar and ScrollNav

Please make sure these boxes are checked before submitting your PR, thank you!

[x] Make sure you follow DiDi's contributing guide.
[x] Make sure you are merging your commits to dev branch.
[x] Add some descriptions and refer relative issues for you PR.

#225 #217

Travis tests have failed
Hey @dolymood,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
Node.js: 6

     npm test

><EMAIL_ADDRESS>test /home/travis/build/didi/cube-ui
> npm run unit && npm run codecov

><EMAIL_ADDRESS>unit /home/travis/build/didi/cube-ui
> cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run

(node:3392) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
20 06 2018 09:43:29.131:INFO [karma]: Karma v1.7.1 server started at http://<IP_ADDRESS>:9876/
20 06 2018 09:43:29.134:INFO [launcher]: Launching browser PhantomJS_mobile with unlimited concurrency
20 06 2018 09:43:29.209:INFO [launcher]: Starting browser PhantomJS
20 06 2018 09:43:29.750:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket F3OoZ8qk4J9EFua8AAAA with id 73490189
PhantomJS 2.1.1 (Linux 0.0.0) INFO LOG: 'You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html'

  ActionSheet
    ActionSheet.vue
      ✓ use
      ✓ should render correct contents
      ✓ should render correct contents - no data
      ✓ should render correct contents - picker style
      ✓ should trigger events
    ActionSheet API
      ✓ $createActionSheet API

  Button.vue
    ✓ use
    ✓ should render correct contents
    ✓ props
    ✓ events-called
    ✓ events-no-called

  CascadePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should trigger events
    ✓ should call methods
    ✓ should support async cascade
    ✓ $updateProps
    ✓ should add warn log when single is true

  CheckboxGroup.vue
    ✓ use
    ✓ should render correct contents (horizontal=false)
    ✓ should render correct contents (horizontal=true)
    ✓ should change v-model value

  Checkbox.vue
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  DatePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when configured startColumn and columnCount
    ✓ should render correct contents when configured format
    ✓ should trigger events
    ✓ should call methods
    ✓ $updateProps
    ✓ should add warn log when single is true

  Dialog
    Dialog.vue
      ✓ use
      ✓ should render correct contents - icon
      ✓ should render correct contents - title
      ✓ should render correct contents - alert
      ✓ should render correct contents - confirm
      ✓ should render correct contents - confirmBtn/cancelBtn
      ✓ should trigger events
      ✓ should not trigger events when btn is disabled
    Dialog API
      ✓ $createDialog API

  Drawer
    ✓ use
    ✓ should render correct contents
    ✗ should trigger events
	Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

  Form.vue
    ✓ use
    ✓ should render correct contents
    ✓ should validate & reset correctly
    ✓ should validate & reset correctly - async validate
    ✓ should validate correctly - trigger blur
    ✗ should validate correctly - debounce
	TypeError: null is not an object (evaluating 'vm.show') (webpack:///test/unit/specs/drawer.spec.js:133:8 <- index.js:65153)

    ✗ should trigger events
	TypeError: null is not an object (evaluating '_this2.form.updatePending') (webpack:///form-item.vue:149:0 <- index.js:79198)

  IndexList
    IndexList.vue
      ✓ use
      ✓ should render correct contents
      ✓ should trigger events
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-up-load" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-up
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-down-refresh" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-down
      ✓ should fixed title
      ✓ should not have navbar when navbar prop is false
      ✓ run normal when group or item undefined
      ✓ should handle condition of unexpected param

  Input.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not show clear button when no text
    ✓ should show clear button when has text
    ✓ value should be empty when clear button clicked
    ✓ should support more native props
    ✓ should show password eye and work correctly
    ✓ should trigger events

  Loading.vue
    ✓ use
    ✓ should render correct contents - no size
    ✓ should render correct contents - with size

  Picker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should toggle by change v-model visible
    ✓ should trigger events
    ✓ should refill correct
    ✓ should add warn log when single is true
    ✓ setData when picker is invisible
    ✓ setData when picker is visible

  Popup
    Popup.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents
      ✓ should toggle by change v-model visible
      ✓ events
    Popup API
      ✓ $createPopup API

  Radio.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - horizontal
    ✓ should toggle v-model value
    ✓ v-model should be a number value

  Rate.vue
    ✓ use
    ✓ should render correct contents
    ✓ should trigger change event
    ✓ should trigger change event with click

  ScrollNavBar
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - vertical
    ✓ should trigger events

  ScrollNav
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - sideStyle
    ✓ should sticky & nav correctly
    ✓ should trigger events

  Scroll
    ✓ use
    ✓ should correct by default
    ✓ should render correct contents
    ✓ should trigger pullingDown
    ✓ should not trigger pullingDown
    ✓ should trigger pullingUp
    ✓ should not trigger pullingUp
    ✓ should trigger click
    ✓ should not trigger scroll events
    ✓ should trigger scroll events - with scroll-events
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-before-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
    ✓ should trigger scroll events - with listen-scroll
    ✓ should call correct method

  SegmentPicker
    ✓ use
    ✓ should render correct contents
    ✓ should correct by default
    ✓ should trigger events
    ✓ $updateProps
    ✓ should add warn log when single is true

  Select.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - update txt
    ✓ should trigger events

  Slide.vue
    ✓ use
    ✓ should render correct contents
    ✓ should clone nodes if loop is true
    ✓ should trigger events
    ✓ should trigger scroll-end but without change
    ✓ should go to right pageIndex if set initialIndex

  Sticky
    ✓ use
    ✓ should render correct contents
    ✓ should fixed ele
    ✓ should fixed ele - checkTop
    ✓ should trigger events

  Swipe
    ✓ use
    ✓ should render correct contents
    ✓ should shrink if the swipe width not enough
    ✓ should shrink if the last moving direction is right
    ✓ should shrink and not moved if the duration is more than momentumLimitTime and moving distance is less than momentumLimitDistance
    ✓ should shrink and not moved if y-axis distance is more than x-axis distance
    ✓ should grow if the swipe width enough
    ✓ should grow if the duration is less than momentumLimitTime and moving distance is more than momentumLimitDistance
    ✓ should not swipe out of the boundaries when swiping left
    ✓ should not swipe out of the boundaries when swiping right
    ✓ should trigger events
    ✓ should shrink if another swipe item active
    ✓ should do nothing if active the same swipe item
    ✓ should call refresh if the btns prop has changed
    ✓ should use default props if do not pass any prop

  Switch
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  Textarea.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not expand when blur
    ✓ should expand when focus, fold when blur
    ✓ should has remain when focus
    ✓ should change value
    ✓ should support more native props

  TimePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - no showNow
    ✓ should render correct contents - showNow text
    ✓ should trigger events
    ✓ should have correct args when select normal time
    ✓ should add warn log when sigle is true

  Tip.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents with offset[X]
    ✓ should be hidden after clicked content
    ✓ should be hidden after clicked close button

  Toast
    Toast.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents - time 0
      ✓ should render correct contents - with type
    Toast API
      ✓ $createToast API
      ✗ should trigger correct event
	Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

  Toolbar.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - more actions
    ✓ should trigger events

  Upload.vue
    ✓ use
    ✓ should render correct contents
    ✓ should add files & upload
    ✓ should remove file
    ✓ should start & pause upload
    ✓ should retry upload
    ✓ should trigger events

  Validator
    Validator.vue
      ✓ use
      ✓ should render correct contents - invalid
      ✓ should reset correctly
      ✓ should not validate when disabled
      ✓ should trigger events
    rules
      ✓ should be valid - no rule
      ✓ should be valid - unstated rule
      ✓ should be invalid - require: array
      ✓ should be invalid - type: string
      ✓ should be valid - type: string
      ✓ should be invalid - type: number
      ✓ should be valid - type: number
      ✓ should be invalid - type: array
      ✓ should be valid - type: array
      ✓ should be invalid - type: date
      ✓ should be valid - type: date
      ✓ should be invalid - type: email
      ✓ should be valid - type: email
      ✓ should be invalid - type: tel
      ✓ should be valid - type: tel
      ✓ should be invalid - type: url
      ✓ should be valid - type: url
      ✓ should be invalid - min: string
      ✓ should be valid - min: number
      ✓ should be valid - max: string
      ✓ should be invalid - max: number
      ✓ should be valid - len: string
      ✓ should be invalid - len: number
      ✓ should be invalid - notWhitespace
      ✓ should be invalid - pattern
      ✓ should be invalid - custom
    methods
      ✓ should add customized rule and message
      ✓ should rewrite raw type
      ✓ should change the language of default message

PhantomJS 2.1.1 (Linux 0.0.0): Executed 227 of 227 (4 FAILED) (49.391 secs / NaN secs)
TOTAL: 4 FAILED, 223 SUCCESS

1) should trigger events
     Drawer
     Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

2) should validate correctly - debounce
     Form.vue
     TypeError: null is not an object (evaluating 'vm.show') (webpack:///test/unit/specs/drawer.spec.js:133:8 <- index.js:65153)

3) should trigger events
     Form.vue
     TypeError: null is not an object (evaluating '_this2.form.updatePending') (webpack:///form-item.vue:149:0 <- index.js:79198)

4) should trigger correct event
     Toast Toast API
     Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

=============================== Coverage summary ===============================
Statements   : 96.01% ( 2476/2579 )
Branches     : 84.74% ( 1022/1206 )
Functions    : 95.18% ( 237/249 )
Lines        : 96.07% ( 2470/2571 )
================================================================================

npm ERR! Linux 4.4.0-112-generic
npm ERR! argv "/home/travis/.nvm/versions/node/v6.14.3/bin/node" "/home/travis/.nvm/versions/node/v6.14.3/bin/npm" "run" "unit"
npm ERR! node v6.14.3
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR<EMAIL_ADDRESS>unit: `cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>unit script 'cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the cube-ui package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs cube-ui
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls cube-ui
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/travis/build/didi/cube-ui/npm-debug.log
npm ERR! Test failed.  See above for more details.

Codecov Report

Merging #237 into dev will increase coverage by 0.58%.
The diff coverage is 99.5%.

@@            Coverage Diff             @@
##              dev     #237      +/-   ##
==========================================
+ Coverage   92.42%   93.01%   +0.58%
==========================================
  Files         114      123       +9
  Lines        2390     2590     +200
  Branches      351      385      +34
==========================================
+ Hits         2209     2409     +200
  Misses         96       96
  Partials       85       85

Impacted Files
Coverage Δ

src/components/scroll/scroll.vue
94.69% <ø> (+0.75%)
:arrow_up:

src/components/sticky/sticky.vue
100% <100%> (ø)

src/modules/scroll-nav/index.js
100% <100%> (ø)

src/modules/scroll-nav-bar/index.js
100% <100%> (ø)

src/components/scroll-nav/scroll-nav-panel.vue
100% <100%> (ø)

src/components/scroll-nav-bar/scroll-nav-bar.vue
100% <100%> (ø)

src/common/mixins/parent.js
100% <100%> (ø)

src/modules/sticky/index.js
100% <100%> (ø)

src/components/sticky/sticky-ele.vue
100% <100%> (ø)

src/components/scroll-nav/scroll-nav.vue
98.3% <98.3%> (ø)

... and 10 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7143994...a04d2d8. Read the comment docs.

Travis tests have failed
Hey @dolymood,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
Node.js: 6

     npm test

><EMAIL_ADDRESS>test /home/travis/build/didi/cube-ui
> npm run unit && npm run codecov

><EMAIL_ADDRESS>unit /home/travis/build/didi/cube-ui
> cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run

(node:3376) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
21 06 2018 07:11:50.753:INFO [karma]: Karma v1.7.1 server started at http://<IP_ADDRESS>:9876/
21 06 2018 07:11:50.756:INFO [launcher]: Launching browser PhantomJS_mobile with unlimited concurrency
21 06 2018 07:11:50.764:INFO [launcher]: Starting browser PhantomJS
21 06 2018 07:11:51.457:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket hvY4X9frpkdZoUKNAAAA with id 35113058
PhantomJS 2.1.1 (Linux 0.0.0) INFO LOG: 'You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html'

  ActionSheet
    ActionSheet.vue
      ✓ use
      ✓ should render correct contents
      ✓ should render correct contents - no data
      ✓ should render correct contents - picker style
      ✓ should trigger events
    ActionSheet API
      ✓ $createActionSheet API

  Button.vue
    ✓ use
    ✓ should render correct contents
    ✓ props
    ✓ events-called
    ✓ events-no-called

  CascadePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should trigger events
    ✓ should call methods
    ✓ should support async cascade
    ✓ $updateProps
    ✓ should add warn log when single is true

  CheckboxGroup.vue
    ✓ use
    ✓ should render correct contents (horizontal=false)
    ✓ should render correct contents (horizontal=true)
    ✓ should change v-model value

  Checkbox.vue
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  DatePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when configured startColumn and columnCount
    ✓ should render correct contents when configured format
    ✓ should trigger events
    ✓ should call methods
    ✓ $updateProps
    ✓ should add warn log when single is true

  Dialog
    Dialog.vue
      ✓ use
      ✓ should render correct contents - icon
      ✓ should render correct contents - title
      ✓ should render correct contents - alert
      ✓ should render correct contents - confirm
      ✓ should render correct contents - confirmBtn/cancelBtn
      ✓ should trigger events
      ✓ should not trigger events when btn is disabled
    Dialog API
      ✓ $createDialog API

  Drawer
    ✓ use
    ✓ should render correct contents
    ✓ should trigger events

  Form.vue
    ✓ use
    ✓ should render correct contents
    ✗ should validate & reset correctly
	Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

    ✓ should validate & reset correctly - async validate
    ✓ should validate correctly - trigger blur
    ✓ should validate correctly - debounce
    ✓ should trigger events

  IndexList
    IndexList.vue
      ✓ use
      ✓ should render correct contents
      ✓ should trigger events
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-up-load" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-up
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-down-refresh" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-down
      ✓ should fixed title
      ✓ should not have navbar when navbar prop is false
      ✓ run normal when group or item undefined
      ✓ should handle condition of unexpected param

  Input.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not show clear button when no text
    ✓ should show clear button when has text
    ✓ value should be empty when clear button clicked
    ✓ should support more native props
    ✓ should show password eye and work correctly
    ✓ should trigger events

  Loading.vue
    ✓ use
    ✓ should render correct contents - no size
    ✓ should render correct contents - with size

  Picker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should toggle by change v-model visible
    ✓ should trigger events
    ✓ should refill correct
    ✓ should add warn log when single is true
    ✓ setData when picker is invisible
    ✓ setData when picker is visible

  Popup
    Popup.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents
      ✓ should toggle by change v-model visible
      ✓ events
    Popup API
      ✓ $createPopup API

  Radio.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - horizontal
    ✓ should toggle v-model value
    ✓ v-model should be a number value

  Rate.vue
    ✓ use
    ✓ should render correct contents
    ✓ should trigger change event
    ✓ should trigger change event with click

  ScrollNavBar
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - vertical
    ✓ should trigger events

  ScrollNav
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - sideStyle
    ✓ should sticky & nav correctly
    ✓ should trigger events

  Scroll
    ✓ use
    ✓ should correct by default
    ✓ should render correct contents
    ✓ should trigger pullingDown
    ✓ should not trigger pullingDown
    ✓ should trigger pullingUp
    ✓ should not trigger pullingUp
    ✓ should trigger click
    ✓ should not trigger scroll events
    ✓ should trigger scroll events - with scroll-events
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-before-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
    ✓ should trigger scroll events - with listen-scroll
    ✓ should call correct method

  SegmentPicker
    ✓ use
    ✓ should render correct contents
    ✓ should correct by default
    ✓ should trigger events
    ✓ $updateProps
    ✓ should add warn log when single is true

  Select.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - update txt
    ✓ should trigger events

  Slide.vue
    ✓ use
    ✓ should render correct contents
    ✓ should clone nodes if loop is true
    ✓ should trigger events
    ✓ should trigger scroll-end but without change
    ✓ should go to right pageIndex if set initialIndex

  Sticky
    ✓ use
    ✓ should render correct contents
    ✓ should fixed ele
    ✓ should fixed ele - checkTop
    ✓ should trigger events

  Swipe
    ✓ use
    ✓ should render correct contents
    ✓ should shrink if the swipe width not enough
    ✓ should shrink if the last moving direction is right
    ✓ should shrink and not moved if the duration is more than momentumLimitTime and moving distance is less than momentumLimitDistance
    ✓ should shrink and not moved if y-axis distance is more than x-axis distance
    ✓ should grow if the swipe width enough
    ✓ should grow if the duration is less than momentumLimitTime and moving distance is more than momentumLimitDistance
    ✓ should not swipe out of the boundaries when swiping left
    ✓ should not swipe out of the boundaries when swiping right
    ✓ should trigger events
    ✓ should shrink if another swipe item active
    ✓ should do nothing if active the same swipe item
    ✓ should call refresh if the btns prop has changed
    ✓ should use default props if do not pass any prop

  Switch
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  Textarea.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not expand when blur
    ✓ should expand when focus, fold when blur
    ✓ should has remain when focus
    ✓ should change value
    ✓ should support more native props

  TimePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - no showNow
    ✓ should render correct contents - showNow text
    ✓ should trigger events
    ✓ should have correct args when select normal time
    ✓ should add warn log when sigle is true

  Tip.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents with offset[X]
    ✓ should be hidden after clicked content
    ✓ should be hidden after clicked close button

  Toast
    Toast.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents - time 0
      ✓ should render correct contents - with type
    Toast API
      ✓ $createToast API
      ✓ should trigger correct event

  Toolbar.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - more actions
    ✓ should trigger events

  Upload.vue
    ✓ use
    ✓ should render correct contents
    ✓ should add files & upload
    ✓ should remove file
    ✓ should start & pause upload
    ✓ should retry upload
    ✓ should trigger events

  Validator
    Validator.vue
      ✓ use
      ✓ should render correct contents - invalid
      ✓ should reset correctly
      ✓ should not validate when disabled
      ✓ should trigger events
    rules
      ✓ should be valid - no rule
      ✓ should be valid - unstated rule
      ✓ should be invalid - require: array
      ✓ should be invalid - type: string
      ✓ should be valid - type: string
      ✓ should be invalid - type: number
      ✓ should be valid - type: number
      ✓ should be invalid - type: array
      ✓ should be valid - type: array
      ✓ should be invalid - type: date
      ✓ should be valid - type: date
      ✓ should be invalid - type: email
      ✓ should be valid - type: email
      ✓ should be invalid - type: tel
      ✓ should be valid - type: tel
      ✓ should be invalid - type: url
      ✓ should be valid - type: url
      ✓ should be invalid - min: string
      ✓ should be valid - min: number
      ✓ should be valid - max: string
      ✓ should be invalid - max: number
      ✓ should be valid - len: string
      ✓ should be invalid - len: number
      ✓ should be invalid - notWhitespace
      ✓ should be invalid - pattern
      ✓ should be invalid - custom
    methods
      ✓ should add customized rule and message
      ✓ should rewrite raw type
      ✓ should change the language of default message

PhantomJS 2.1.1 (Linux 0.0.0): Executed 227 of 227 (1 FAILED) (51.462 secs / 50.308 secs)
TOTAL: 1 FAILED, 226 SUCCESS

1) should validate & reset correctly
     Form.vue
     Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

=============================== Coverage summary ===============================
Statements   : 96.32% ( 2484/2579 )
Branches     : 85.03% ( 1028/1209 )
Functions    : 95.18% ( 237/249 )
Lines        : 96.38% ( 2478/2571 )
================================================================================

npm ERR! Linux 4.14.12-041412-generic
npm ERR! argv "/home/travis/.nvm/versions/node/v6.14.3/bin/node" "/home/travis/.nvm/versions/node/v6.14.3/bin/npm" "run" "unit"
npm ERR! node v6.14.3
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR<EMAIL_ADDRESS>unit: `cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>unit script 'cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the cube-ui package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs cube-ui
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls cube-ui
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/travis/build/didi/cube-ui/npm-debug.log
npm ERR! Test failed.  See above for more details.

Travis tests have failed
Hey @dolymood,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
Node.js: 6

     npm test

><EMAIL_ADDRESS>test /home/travis/build/didi/cube-ui
> npm run unit && npm run codecov

><EMAIL_ADDRESS>unit /home/travis/build/didi/cube-ui
> cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run

(node:3378) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
21 06 2018 08:46:42.508:INFO [karma]: Karma v1.7.1 server started at http://<IP_ADDRESS>:9876/
21 06 2018 08:46:42.512:INFO [launcher]: Launching browser PhantomJS_mobile with unlimited concurrency
21 06 2018 08:46:42.535:INFO [launcher]: Starting browser PhantomJS
21 06 2018 08:46:43.405:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket 2ygmvVLT8R_RjMqqAAAA with id 9153088
PhantomJS 2.1.1 (Linux 0.0.0) INFO LOG: 'You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html'

  ActionSheet
    ActionSheet.vue
      ✓ use
      ✓ should render correct contents
      ✓ should render correct contents - no data
      ✓ should render correct contents - picker style
      ✓ should trigger events
    ActionSheet API
      ✓ $createActionSheet API

  Button.vue
    ✓ use
    ✓ should render correct contents
    ✓ props
    ✓ events-called
    ✓ events-no-called

  CascadePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should trigger events
    ✓ should call methods
    ✓ should support async cascade
    ✓ $updateProps
    ✓ should add warn log when single is true

  CheckboxGroup.vue
    ✓ use
    ✓ should render correct contents (horizontal=false)
    ✓ should render correct contents (horizontal=true)
    ✓ should change v-model value

  Checkbox.vue
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  DatePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when configured startColumn and columnCount
    ✓ should render correct contents when configured format
    ✓ should trigger events
    ✓ should call methods
    ✓ $updateProps
    ✓ should add warn log when single is true

  Dialog
    Dialog.vue
      ✓ use
      ✓ should render correct contents - icon
      ✓ should render correct contents - title
      ✓ should render correct contents - alert
      ✓ should render correct contents - confirm
      ✓ should render correct contents - confirmBtn/cancelBtn
      ✓ should trigger events
      ✓ should not trigger events when btn is disabled
    Dialog API
      ✓ $createDialog API

  Drawer
    ✓ use
    ✓ should render correct contents
    ✓ should trigger events

  Form.vue
    ✓ use
    ✓ should render correct contents
    ✓ should validate & reset correctly
    ✓ should validate & reset correctly - async validate
    ✓ should validate correctly - trigger blur
    ✓ should validate correctly - debounce
    ✓ should trigger events

  IndexList
    IndexList.vue
      ✓ use
      ✓ should render correct contents
      ✓ should trigger events
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-up-load" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-up
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-down-refresh" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-down
      ✓ should fixed title
      ✓ should not have navbar when navbar prop is false
      ✓ run normal when group or item undefined
      ✓ should handle condition of unexpected param

  Input.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not show clear button when no text
    ✓ should show clear button when has text
    ✓ value should be empty when clear button clicked
    ✓ should support more native props
    ✓ should show password eye and work correctly
    ✓ should trigger events

  Loading.vue
    ✓ use
    ✓ should render correct contents - no size
    ✓ should render correct contents - with size

  Picker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should toggle by change v-model visible
    ✓ should trigger events
    ✓ should refill correct
    ✓ should add warn log when single is true
    ✓ setData when picker is invisible
    ✓ setData when picker is visible

  Popup
    Popup.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents
      ✓ should toggle by change v-model visible
      ✓ events
    Popup API
      ✓ $createPopup API

  Radio.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - horizontal
    ✓ should toggle v-model value
    ✓ v-model should be a number value

  Rate.vue
    ✓ use
    ✓ should render correct contents
    ✓ should trigger change event
    ✓ should trigger change event with click

  ScrollNavBar
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - vertical
    ✓ should trigger events

  ScrollNav
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - sideStyle
    ✓ should sticky & nav correctly
    ✓ should trigger events

  Scroll
    ✓ use
    ✓ should correct by default
    ✓ should render correct contents
    ✓ should trigger pullingDown
    ✓ should not trigger pullingDown
    ✗ should trigger pullingUp
	AssertionError: expected spy to have been called exactly once, but it was called 0 times (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ should not trigger pullingUp
    ✓ should trigger click
    ✓ should not trigger scroll events
    ✓ should trigger scroll events - with scroll-events
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-before-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
    ✓ should trigger scroll events - with listen-scroll
    ✓ should call correct method

  SegmentPicker
    ✓ use
    ✓ should render correct contents
    ✓ should correct by default
    ✓ should trigger events
    ✓ $updateProps
    ✓ should add warn log when single is true

  Select.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - update txt
    ✓ should trigger events

  Slide.vue
    ✓ use
    ✓ should render correct contents
    ✓ should clone nodes if loop is true
    ✓ should trigger events
    ✓ should trigger scroll-end but without change
    ✓ should go to right pageIndex if set initialIndex

  Sticky
    ✓ use
    ✓ should render correct contents
    ✓ should fixed ele
    ✓ should fixed ele - checkTop
    ✓ should trigger events

  Swipe
    ✓ use
    ✓ should render correct contents
    ✓ should shrink if the swipe width not enough
    ✓ should shrink if the last moving direction is right
    ✓ should shrink and not moved if the duration is more than momentumLimitTime and moving distance is less than momentumLimitDistance
    ✓ should shrink and not moved if y-axis distance is more than x-axis distance
    ✓ should grow if the swipe width enough
    ✓ should grow if the duration is less than momentumLimitTime and moving distance is more than momentumLimitDistance
    ✓ should not swipe out of the boundaries when swiping left
    ✓ should not swipe out of the boundaries when swiping right
    ✓ should trigger events
    ✓ should shrink if another swipe item active
    ✓ should do nothing if active the same swipe item
    ✓ should call refresh if the btns prop has changed
    ✓ should use default props if do not pass any prop

  Switch
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  Textarea.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not expand when blur
    ✓ should expand when focus, fold when blur
    ✓ should has remain when focus
    ✓ should change value
    ✓ should support more native props

  TimePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - no showNow
    ✓ should render correct contents - showNow text
    ✓ should trigger events
    ✓ should have correct args when select normal time
    ✓ should add warn log when sigle is true

  Tip.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents with offset[X]
    ✓ should be hidden after clicked content
    ✓ should be hidden after clicked close button

  Toast
    Toast.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents - time 0
      ✓ should render correct contents - with type
    Toast API
      ✓ $createToast API
      ✓ should trigger correct event

  Toolbar.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - more actions
    ✓ should trigger events

  Upload.vue
    ✓ use
    ✓ should render correct contents
    ✓ should add files & upload
    ✓ should remove file
    ✓ should start & pause upload
    ✓ should retry upload
    ✓ should trigger events

  Validator
    Validator.vue
      ✓ use
      ✓ should render correct contents - invalid
      ✓ should reset correctly
      ✓ should not validate when disabled
      ✓ should trigger events
    rules
      ✓ should be valid - no rule
      ✓ should be valid - unstated rule
      ✓ should be invalid - require: array
      ✓ should be invalid - type: string
      ✓ should be valid - type: string
      ✓ should be invalid - type: number
      ✓ should be valid - type: number
      ✓ should be invalid - type: array
      ✓ should be valid - type: array
      ✓ should be invalid - type: date
      ✓ should be valid - type: date
      ✓ should be invalid - type: email
      ✓ should be valid - type: email
      ✓ should be invalid - type: tel
      ✓ should be valid - type: tel
      ✓ should be invalid - type: url
      ✓ should be valid - type: url
      ✓ should be invalid - min: string
      ✓ should be valid - min: number
      ✓ should be valid - max: string
      ✓ should be invalid - max: number
      ✓ should be valid - len: string
      ✓ should be invalid - len: number
      ✓ should be invalid - notWhitespace
      ✓ should be invalid - pattern
      ✓ should be invalid - custom
    methods
      ✓ should add customized rule and message
      ✓ should rewrite raw type
      ✓ should change the language of default message

PhantomJS 2.1.1 (Linux 0.0.0): Executed 227 of 227 (1 FAILED) (47.211 secs / NaN secs)
TOTAL: 1 FAILED, 226 SUCCESS

1) should trigger pullingUp
     Scroll
     AssertionError: expected spy to have been called exactly once, but it was called 0 times (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

=============================== Coverage summary ===============================
Statements   : 96.2% ( 2481/2579 )
Branches     : 84.97% ( 1029/1211 )
Functions    : 95.16% ( 236/248 )
Lines        : 96.27% ( 2475/2571 )
================================================================================

npm ERR! Linux 4.14.12-041412-generic
npm ERR! argv "/home/travis/.nvm/versions/node/v6.14.3/bin/node" "/home/travis/.nvm/versions/node/v6.14.3/bin/npm" "run" "unit"
npm ERR! node v6.14.3
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR<EMAIL_ADDRESS>unit: `cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>unit script 'cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the cube-ui package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs cube-ui
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls cube-ui
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/travis/build/didi/cube-ui/npm-debug.log
npm ERR! Test failed.  See above for more details.

Travis tests have failed
Hey @dolymood,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
Node.js: 6

     npm test

><EMAIL_ADDRESS>test /home/travis/build/didi/cube-ui
> npm run unit && npm run codecov

><EMAIL_ADDRESS>unit /home/travis/build/didi/cube-ui
> cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run

(node:3375) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
26 06 2018 07:31:55.422:INFO [karma]: Karma v1.7.1 server started at http://<IP_ADDRESS>:9876/
26 06 2018 07:31:55.425:INFO [launcher]: Launching browser PhantomJS_mobile with unlimited concurrency
26 06 2018 07:31:55.453:INFO [launcher]: Starting browser PhantomJS
26 06 2018 07:31:56.759:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket wpahQxJbH-YJnb6zAAAA with id 70044
PhantomJS 2.1.1 (Linux 0.0.0) INFO LOG: 'You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html'

  ActionSheet
    ActionSheet.vue
      ✓ use
      ✓ should render correct contents
      ✓ should render correct contents - no data
      ✓ should render correct contents - picker style
      ✓ should trigger events
    ActionSheet API
      ✓ $createActionSheet API

  Button.vue
    ✓ use
    ✓ should render correct contents
    ✓ props
    ✓ events-called
    ✓ events-no-called

  CascadePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly once, but it was called 5 times
	    spy(0, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(1, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(2, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ should call methods
    ✓ should support async cascade
    ✓ $updateProps
    ✓ should add warn log when single is true

  CheckboxGroup.vue
    ✓ use
    ✓ should render correct contents (horizontal=false)
    ✓ should render correct contents (horizontal=true)
    ✓ should change v-model value

  Checkbox.vue
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  DatePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when configured startColumn and columnCount
    ✓ should render correct contents when configured format
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly once, but it was called 5 times
	    spy(0, 2) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(1, 9) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(2, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 2) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 2) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ should call methods
    ✓ $updateProps
    ✓ should add warn log when single is true

  Dialog
    Dialog.vue
      ✓ use
      ✓ should render correct contents - icon
      ✓ should render correct contents - title
      ✓ should render correct contents - alert
      ✓ should render correct contents - confirm
      ✓ should render correct contents - confirmBtn/cancelBtn
      ✓ should trigger events
      ✓ should not trigger events when btn is disabled
    Dialog API
      ✓ $createDialog API

  Drawer
    ✓ use
    ✓ should render correct contents
    ✓ should trigger events

  Form.vue
    ✓ use
    ✓ should render correct contents
    ✓ should validate & reset correctly
    ✓ should validate & reset correctly - async validate
    ✓ should validate correctly - trigger blur
    ✓ should validate correctly - debounce
    ✓ should trigger events

  IndexList
    IndexList.vue
      ✓ use
      ✓ should render correct contents
      ✓ should trigger events
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-up-load" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-up
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-down-refresh" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-down
      ✗ should fixed title
	AssertionError: expected 'B' to equal 'C' (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

      ✓ should not have navbar when navbar prop is false
      ✓ run normal when group or item undefined
      ✓ should handle condition of unexpected param

  Input.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not show clear button when no text
    ✓ should show clear button when has text
    ✓ value should be empty when clear button clicked
    ✓ should support more native props
    ✓ should show password eye and work correctly
    ✓ should trigger events

  Loading.vue
    ✓ use
    ✓ should render correct contents - no size
    ✓ should render correct contents - with size

  Picker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should toggle by change v-model visible
    ✓ should trigger events
    ✓ should refill correct
    ✓ should add warn log when single is true
    ✓ setData when picker is invisible
    ✓ setData when picker is visible

  Popup
    Popup.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents
      ✓ should toggle by change v-model visible
      ✓ events
    Popup API
      ✓ $createPopup API

  Radio.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - horizontal
    ✓ should toggle v-model value
    ✓ v-model should be a number value

  Rate.vue
    ✓ use
    ✓ should render correct contents
    ✓ should trigger change event
    ✓ should trigger change event with click

  ScrollNavBar
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - vertical
    ✓ should trigger events

  ScrollNav
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - sideStyle
    ✓ should sticky & nav correctly
    ✓ should trigger events

  Scroll
    ✓ use
    ✓ should correct by default
    ✓ should render correct contents
    ✓ should trigger pullingDown
    ✓ should not trigger pullingDown
    ✓ should trigger pullingUp
    ✓ should not trigger pullingUp
    ✓ should trigger click
    ✓ should not trigger scroll events
    ✗ should trigger scroll events - with scroll-events
	AssertionError: expected spy to have been called exactly once, but it was called twice
	    spy({ x: 0, y: -63 }) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy({ x: 0, y: -100 }) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-before-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
    ✓ should trigger scroll events - with listen-scroll
    ✓ should call correct method

  SegmentPicker
    ✓ use
    ✓ should render correct contents
    ✓ should correct by default
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly once, but it was called thrice
	    spy(0, 0, 1) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 0, 1) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 0, 1) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ $updateProps
    ✓ should add warn log when single is true

  Select.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - update txt
    ✓ should trigger events

  Slide.vue
    ✓ use
    ✓ should render correct contents
    ✓ should clone nodes if loop is true
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly twice, but it was called 4 times
	    spy(1) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23
	    spy(1) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23
	    spy(0) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23
	    spy(0) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✗ should trigger scroll-end but without change
	AssertionError: expected spy to have been called exactly once, but it was called twice
	    spy(0) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23
	    spy(0) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ should go to right pageIndex if set initialIndex

  Sticky
    ✓ use
    ✓ should render correct contents
    ✓ should fixed ele
    ✓ should fixed ele - checkTop
    ✓ should trigger events

  Swipe
    ✓ use
    ✓ should render correct contents
    ✓ should shrink if the swipe width not enough
    ✓ should shrink if the last moving direction is right
    ✓ should shrink and not moved if the duration is more than momentumLimitTime and moving distance is less than momentumLimitDistance
    ✓ should shrink and not moved if y-axis distance is more than x-axis distance
    ✓ should grow if the swipe width enough
    ✓ should grow if the duration is less than momentumLimitTime and moving distance is more than momentumLimitDistance
    ✓ should not swipe out of the boundaries when swiping left
    ✓ should not swipe out of the boundaries when swiping right
    ✓ should trigger events
    ✓ should shrink if another swipe item active
    ✓ should do nothing if active the same swipe item
    ✓ should call refresh if the btns prop has changed
    ✓ should use default props if do not pass any prop

  Switch
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  Textarea.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not expand when blur
    ✓ should expand when focus, fold when blur
    ✓ should has remain when focus
    ✓ should change value
    ✓ should support more native props

  TimePicker
    ✓ use
26 06 2018 07:32:45.895:WARN [PhantomJS 2.1.1 (Linux 0.0.0)]: Disconnected (1 times), because no message in 10000 ms.
PhantomJS 2.1.1 (Linux 0.0.0) ERROR
  Disconnected, because no message in 10000 ms.

PhantomJS 2.1.1 (Linux 0.0.0): Executed 165 of 227 (7 FAILED) DISCONNECTED (48.331 secs / NaN secs)

=============================== Coverage summary ===============================
Statements   : 100% ( 0/0 )
Branches     : 100% ( 0/0 )
Functions    : 100% ( 0/0 )
Lines        : 100% ( 0/0 )
================================================================================

npm ERR! Linux 4.14.12-041412-generic
npm ERR! argv "/home/travis/.nvm/versions/node/v6.14.3/bin/node" "/home/travis/.nvm/versions/node/v6.14.3/bin/npm" "run" "unit"
npm ERR! node v6.14.3
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR<EMAIL_ADDRESS>unit: `cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>unit script 'cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the cube-ui package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs cube-ui
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls cube-ui
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/travis/build/didi/cube-ui/npm-debug.log
npm ERR! Test failed.  See above for more details.

Travis tests have failed
Hey @dolymood,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
Node.js: 6

     npm test

><EMAIL_ADDRESS>test /home/travis/build/didi/cube-ui
> npm run unit && npm run codecov

><EMAIL_ADDRESS>unit /home/travis/build/didi/cube-ui
> cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run

(node:3382) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
26 06 2018 07:41:14.819:INFO [karma]: Karma v1.7.1 server started at http://<IP_ADDRESS>:9876/
26 06 2018 07:41:14.822:INFO [launcher]: Launching browser PhantomJS_mobile with unlimited concurrency
26 06 2018 07:41:14.910:INFO [launcher]: Starting browser PhantomJS
26 06 2018 07:41:15.664:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket rHlB0IiTE5Qt-1BmAAAA with id 83585153
PhantomJS 2.1.1 (Linux 0.0.0) INFO LOG: 'You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html'

  ActionSheet
    ActionSheet.vue
      ✓ use
      ✓ should render correct contents
      ✓ should render correct contents - no data
      ✓ should render correct contents - picker style
      ✓ should trigger events
    ActionSheet API
      ✓ $createActionSheet API

  Button.vue
    ✓ use
    ✓ should render correct contents
    ✓ props
    ✓ events-called
    ✓ events-no-called

  CascadePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly once, but it was called 5 times
	    spy(0, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(1, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(2, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ should call methods
    ✓ should support async cascade
    ✓ $updateProps
    ✓ should add warn log when single is true

  CheckboxGroup.vue
    ✓ use
    ✓ should render correct contents (horizontal=false)
    ✓ should render correct contents (horizontal=true)
    ✓ should change v-model value

  Checkbox.vue
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  DatePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when configured startColumn and columnCount
    ✓ should render correct contents when configured format
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly once, but it was called 5 times
	    spy(0, 2) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(1, 9) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(2, 0) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 2) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 2) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ should call methods
    ✓ $updateProps
    ✓ should add warn log when single is true

  Dialog
    Dialog.vue
      ✓ use
      ✓ should render correct contents - icon
      ✓ should render correct contents - title
      ✓ should render correct contents - alert
      ✓ should render correct contents - confirm
      ✓ should render correct contents - confirmBtn/cancelBtn
      ✓ should trigger events
      ✓ should not trigger events when btn is disabled
    Dialog API
      ✓ $createDialog API

  Drawer
    ✓ use
    ✓ should render correct contents
    ✓ should trigger events

  Form.vue
    ✓ use
    ✓ should render correct contents
    ✓ should validate & reset correctly
    ✓ should validate & reset correctly - async validate
    ✓ should validate correctly - trigger blur
    ✓ should validate correctly - debounce
    ✓ should trigger events

  IndexList
    IndexList.vue
      ✓ use
      ✓ should render correct contents
      ✓ should trigger events
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-up-load" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-up
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-down-refresh" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-down
      ✗ should fixed title
	AssertionError: expected 'B' to equal 'C' (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

      ✓ should not have navbar when navbar prop is false
      ✓ run normal when group or item undefined
      ✓ should handle condition of unexpected param

  Input.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not show clear button when no text
    ✓ should show clear button when has text
    ✓ value should be empty when clear button clicked
    ✓ should support more native props
    ✓ should show password eye and work correctly
    ✓ should trigger events

  Loading.vue
    ✓ use
    ✓ should render correct contents - no size
    ✓ should render correct contents - with size

  Picker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should toggle by change v-model visible
    ✓ should trigger events
    ✓ should refill correct
    ✓ should add warn log when single is true
    ✓ setData when picker is invisible
    ✓ setData when picker is visible

  Popup
    Popup.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents
      ✓ should toggle by change v-model visible
      ✓ events
    Popup API
      ✓ $createPopup API

  Radio.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - horizontal
    ✓ should toggle v-model value
    ✓ v-model should be a number value

  Rate.vue
    ✓ use
    ✓ should render correct contents
    ✓ should trigger change event
    ✓ should trigger change event with click

  ScrollNavBar
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - vertical
    ✓ should trigger events

  ScrollNav
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - sideStyle
    ✓ should sticky & nav correctly
    ✓ should trigger events

  Scroll
    ✓ use
    ✓ should correct by default
    ✓ should render correct contents
    ✓ should trigger pullingDown
    ✓ should not trigger pullingDown
    ✓ should trigger pullingUp
    ✓ should not trigger pullingUp
    ✓ should trigger click
    ✓ should not trigger scroll events
    ✗ should trigger scroll events - with scroll-events
	AssertionError: expected spy to have been called exactly once, but it was called twice
	    spy({ x: 0, y: -63 }) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy({ x: 0, y: -100 }) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-before-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
    ✓ should trigger scroll events - with listen-scroll
    ✓ should call correct method

  SegmentPicker
    ✓ use
    ✓ should render correct contents
    ✓ should correct by default
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly once, but it was called thrice
	    spy(0, 0, 1) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 0, 1) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23
	    spy(0, 0, 1) at $emit@webpack:///node_modules/vue/dist/vue.esm.js:2538:0 <- index.js:3007:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ $updateProps
    ✓ should add warn log when single is true

  Select.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - update txt
    ✓ should trigger events

  Slide.vue
    ✓ use
    ✓ should render correct contents
    ✓ should clone nodes if loop is true
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly twice, but it was called 4 times
	    spy(1) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23
	    spy(1) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23
	    spy(0) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23
	    spy(0) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✗ should trigger scroll-end but without change
	AssertionError: expected spy to have been called exactly once, but it was called twice
	    spy(0) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23
	    spy(0) at invoker@webpack:///node_modules/vue/dist/vue.esm.js:2027:0 <- index.js:2496:23 (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ should go to right pageIndex if set initialIndex

  Sticky
    ✓ use
    ✓ should render correct contents
    ✓ should fixed ele
    ✓ should fixed ele - checkTop
    ✓ should trigger events

  Swipe
    ✓ use
    ✓ should render correct contents
    ✓ should shrink if the swipe width not enough
    ✓ should shrink if the last moving direction is right
    ✓ should shrink and not moved if the duration is more than momentumLimitTime and moving distance is less than momentumLimitDistance
    ✓ should shrink and not moved if y-axis distance is more than x-axis distance
    ✓ should grow if the swipe width enough
    ✓ should grow if the duration is less than momentumLimitTime and moving distance is more than momentumLimitDistance
    ✓ should not swipe out of the boundaries when swiping left
    ✓ should not swipe out of the boundaries when swiping right
    ✓ should trigger events
    ✓ should shrink if another swipe item active
    ✓ should do nothing if active the same swipe item
    ✓ should call refresh if the btns prop has changed
    ✓ should use default props if do not pass any prop

  Switch
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  Textarea.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not expand when blur
    ✓ should expand when focus, fold when blur
    ✓ should has remain when focus
    ✓ should change value
    ✓ should support more native props

  TimePicker
    ✓ use
26 06 2018 07:42:07.939:WARN [PhantomJS 2.1.1 (Linux 0.0.0)]: Disconnected (1 times), because no message in 10000 ms.
PhantomJS 2.1.1 (Linux 0.0.0) ERROR
  Disconnected, because no message in 10000 ms.

PhantomJS 2.1.1 (Linux 0.0.0): Executed 165 of 227 (7 FAILED) DISCONNECTED (50.33 secs / NaN secs)

=============================== Coverage summary ===============================
Statements   : 100% ( 0/0 )
Branches     : 100% ( 0/0 )
Functions    : 100% ( 0/0 )
Lines        : 100% ( 0/0 )
================================================================================

npm ERR! Linux 4.14.12-041412-generic
npm ERR! argv "/home/travis/.nvm/versions/node/v6.14.3/bin/node" "/home/travis/.nvm/versions/node/v6.14.3/bin/npm" "run" "unit"
npm ERR! node v6.14.3
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR<EMAIL_ADDRESS>unit: `cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>unit script 'cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the cube-ui package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs cube-ui
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls cube-ui
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/travis/build/didi/cube-ui/npm-debug.log
npm ERR! Test failed.  See above for more details.

Travis tests have failed
Hey @dolymood,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
Node.js: 6

     npm test

><EMAIL_ADDRESS>test /home/travis/build/didi/cube-ui
> npm run unit && npm run codecov

><EMAIL_ADDRESS>unit /home/travis/build/didi/cube-ui
> cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run

(node:3384) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
26 06 2018 10:35:13.854:INFO [karma]: Karma v1.7.1 server started at http://<IP_ADDRESS>:9876/
26 06 2018 10:35:13.858:INFO [launcher]: Launching browser PhantomJS_mobile with unlimited concurrency
26 06 2018 10:35:13.874:INFO [launcher]: Starting browser PhantomJS
26 06 2018 10:35:16.805:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket rHjTS4yvSAJNoKVHAAAA with id 39108484
PhantomJS 2.1.1 (Linux 0.0.0) INFO LOG: 'You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html'

  ActionSheet
    ActionSheet.vue
      ✓ use
      ✓ should render correct contents
      ✓ should render correct contents - no data
      ✓ should render correct contents - picker style
      ✓ should trigger events
    ActionSheet API
      ✓ $createActionSheet API

  Button.vue
    ✓ use
    ✓ should render correct contents
    ✓ props
    ✓ events-called
    ✓ events-no-called

  CascadePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should trigger events
    ✓ should call methods
    ✓ should support async cascade
    ✓ $updateProps
    ✓ should add warn log when single is true

  CheckboxGroup.vue
    ✓ use
    ✓ should render correct contents (horizontal=false)
    ✓ should render correct contents (horizontal=true)
    ✓ should change v-model value

  Checkbox.vue
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  DatePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when configured startColumn and columnCount
    ✓ should render correct contents when configured format
    ✓ should trigger events
    ✓ should call methods
    ✓ $updateProps
    ✓ should add warn log when single is true

  Dialog
    Dialog.vue
      ✓ use
      ✓ should render correct contents - icon
      ✓ should render correct contents - title
      ✓ should render correct contents - alert
      ✓ should render correct contents - confirm
      ✓ should render correct contents - confirmBtn/cancelBtn
      ✓ should trigger events
      ✓ should not trigger events when btn is disabled
    Dialog API
      ✓ $createDialog API

  Drawer
    ✓ use
    ✓ should render correct contents
    ✓ should trigger events

  Form.vue
    ✓ use
    ✓ should render correct contents
    ✓ should validate & reset correctly
    ✓ should validate & reset correctly - async validate
    ✓ should validate correctly - trigger blur
    ✓ should validate correctly - debounce
    ✓ should trigger events

  IndexList
    IndexList.vue
      ✓ use
      ✓ should render correct contents
      ✓ should trigger events
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-up-load" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-up
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-down-refresh" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-down
      ✓ should fixed title
      ✓ should not have navbar when navbar prop is false
      ✓ run normal when group or item undefined
      ✓ should handle condition of unexpected param

  Input.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not show clear button when no text
    ✓ should show clear button when has text
    ✓ value should be empty when clear button clicked
    ✓ should support more native props
    ✓ should show password eye and work correctly
    ✓ should trigger events

  Loading.vue
    ✓ use
    ✓ should render correct contents - no size
    ✓ should render correct contents - with size

  Picker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should toggle by change v-model visible
    ✓ should trigger events
    ✓ should refill correct
    ✓ should add warn log when single is true
    ✓ setData when picker is invisible
    ✓ setData when picker is visible

  Popup
    Popup.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents
      ✓ should toggle by change v-model visible
      ✓ events
    Popup API
      ✓ $createPopup API

  Radio.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - horizontal
    ✓ should toggle v-model value
    ✓ v-model should be a number value

  Rate.vue
    ✓ use
    ✓ should render correct contents
    ✓ should trigger change event
    ✓ should trigger change event with click

  ScrollNavBar
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - vertical
    ✓ should trigger events

  ScrollNav
    ✓ use
    ✓ should render correct contents
    ✗ should render correct contents - sideStyle
	AssertionError: expected '★热门城市' to equal 'A' (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ should sticky & nav correctly
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly 6 times, but it was called 7 times
	    spy(★热门城市) at changeHandler@[native code]
	    spy(C) at changeHandler@[native code]
	    spy(E) at changeHandler@[native code]
	    spy(F) at changeHandler@[native code]
	    spy(G) at changeHandler@[native code]
	    spy(H) at changeHandler@[native code]
	    spy(G) at changeHandler@[native code] (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

  Scroll
    ✓ use
    ✓ should correct by default
    ✓ should render correct contents
    ✓ should trigger pullingDown
    ✓ should not trigger pullingDown
    ✓ should trigger pullingUp
    ✓ should not trigger pullingUp
    ✓ should trigger click
    ✓ should not trigger scroll events
    ✓ should trigger scroll events - with scroll-events
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-before-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
    ✓ should trigger scroll events - with listen-scroll
    ✓ should call correct method

  SegmentPicker
    ✓ use
    ✓ should render correct contents
    ✓ should correct by default
    ✓ should trigger events
    ✓ $updateProps
    ✓ should add warn log when single is true

  Select.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - update txt
    ✓ should trigger events

  Slide.vue
    ✓ use
    ✓ should render correct contents
    ✓ should clone nodes if loop is true
    ✓ should trigger events
    ✓ should trigger scroll-end but without change
    ✓ should go to right pageIndex if set initialIndex

  Sticky
    ✓ use
    ✓ should render correct contents
    ✓ should fixed ele
    ✓ should fixed ele - checkTop
    ✓ should trigger events

  Swipe
    ✓ use
    ✓ should render correct contents
    ✓ should shrink if the swipe width not enough
    ✓ should shrink if the last moving direction is right
    ✓ should shrink and not moved if the duration is more than momentumLimitTime and moving distance is less than momentumLimitDistance
    ✓ should shrink and not moved if y-axis distance is more than x-axis distance
    ✓ should grow if the swipe width enough
    ✓ should grow if the duration is less than momentumLimitTime and moving distance is more than momentumLimitDistance
    ✓ should not swipe out of the boundaries when swiping left
    ✓ should not swipe out of the boundaries when swiping right
    ✓ should trigger events
    ✓ should shrink if another swipe item active
    ✓ should do nothing if active the same swipe item
    ✓ should call refresh if the btns prop has changed
    ✓ should use default props if do not pass any prop

  Switch
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  Textarea.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not expand when blur
    ✓ should expand when focus, fold when blur
    ✓ should has remain when focus
    ✓ should change value
    ✓ should support more native props

  TimePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - no showNow
    ✓ should render correct contents - showNow text
    ✓ should trigger events
    ✓ should have correct args when select normal time
      ✓ should render correct contents - with type
    Toast API
      ✓ $createToast API
      ✓ should trigger correct event

  Toolbar.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - more actions
    ✓ should trigger events

  Upload.vue
    ✓ use
    ✓ should render correct contents
    ✓ should add files & upload
    ✓ should remove file
    ✓ should start & pause upload
    ✓ should retry upload
    ✓ should trigger events

  Validator
    Validator.vue
      ✓ use
      ✓ should render correct contents - invalid
      ✓ should reset correctly
      ✓ should not validate when disabled
      ✓ should trigger events
    rules
      ✓ should be valid - no rule
      ✓ should be valid - unstated rule
      ✓ should be invalid - require: array
      ✓ should be invalid - type: string
      ✓ should be valid - type: string
      ✓ should be invalid - type: number
      ✓ should be valid - type: number
      ✓ should be invalid - type: array
      ✓ should be valid - type: array
      ✓ should be invalid - type: date
      ✓ should be valid - type: date
      ✓ should be invalid - type: email
      ✓ should be valid - type: email
      ✓ should be invalid - type: tel
      ✓ should be valid - type: tel
      ✓ should be invalid - type: url
      ✓ should be valid - type: url
      ✓ should be invalid - min: string
      ✓ should be valid - min: number
      ✓ should be valid - max: string
      ✓ should be invalid - max: number
      ✓ should be valid - len: string
      ✓ should be invalid - len: number
      ✓ should be invalid - notWhitespace
      ✓ should be invalid - pattern
      ✓ should be invalid - custom
    methods
      ✓ should add customized rule and message
      ✓ should rewrite raw type
      ✓ should change the language of default message

PhantomJS 2.1.1 (Linux 0.0.0): Executed 227 of 227 (2 FAILED) (48.137 secs / NaN secs)
TOTAL: 2 FAILED, 225 SUCCESS

1) should render correct contents - sideStyle
     ScrollNav
     AssertionError: expected '★热门城市' to equal 'A' (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

2) should trigger events
     ScrollNav
     AssertionError: expected spy to have been called exactly 6 times, but it was called 7 times
    spy(★热门城市) at changeHandler@[native code]
    spy(C) at changeHandler@[native code]
    spy(E) at changeHandler@[native code]
    spy(F) at changeHandler@[native code]
    spy(G) at changeHandler@[native code]
    spy(H) at changeHandler@[native code]
    spy(G) at changeHandler@[native code] (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

=============================== Coverage summary ===============================
Statements   : 96.25% ( 2492/2589 )
Branches     : 84.9% ( 1029/1212 )
Functions    : 95.18% ( 237/249 )
Lines        : 96.32% ( 2486/2581 )
================================================================================

npm ERR! Linux 4.14.12-041412-generic
npm ERR! argv "/home/travis/.nvm/versions/node/v6.14.3/bin/node" "/home/travis/.nvm/versions/node/v6.14.3/bin/npm" "run" "unit"
npm ERR! node v6.14.3
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR<EMAIL_ADDRESS>unit: `cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>unit script 'cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the cube-ui package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs cube-ui
npm nothing changed, not updating cache

Done. Your build exited with 1.

Travis tests have failed
Hey @dolymood,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
Node.js: 6

     npm test

><EMAIL_ADDRESS>test /home/travis/build/didi/cube-ui
> npm run unit && npm run codecov

><EMAIL_ADDRESS>unit /home/travis/build/didi/cube-ui
> cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run

(node:3392) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.

Travis tests have failed
Hey @dolymood,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
Node.js: 6

     npm test

><EMAIL_ADDRESS>test /home/travis/build/didi/cube-ui
> npm run unit && npm run codecov

><EMAIL_ADDRESS>unit /home/travis/build/didi/cube-ui
> cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run

(node:3374) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
26 06 2018 10:44:42.753:INFO [karma]: Karma v1.7.1 server started at http://<IP_ADDRESS>:9876/
26 06 2018 10:44:42.756:INFO [launcher]: Launching browser PhantomJS_mobile with unlimited concurrency
26 06 2018 10:44:42.764:INFO [launcher]: Starting browser PhantomJS
26 06 2018 10:44:43.435:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket 71Ze6ZC6JYE3hKGyAAAA with id 61162764
PhantomJS 2.1.1 (Linux 0.0.0) INFO LOG: 'You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html'

  ActionSheet
    ActionSheet.vue
      ✓ use
      ✓ should render correct contents
      ✓ should render correct contents - no data
      ✓ should render correct contents - picker style
      ✓ should trigger events
    ActionSheet API
      ✓ $createActionSheet API

  Button.vue
    ✓ use
    ✓ should render correct contents
    ✓ props
    ✓ events-called
    ✓ events-no-called

  CascadePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should trigger events
    ✓ should call methods
    ✓ should support async cascade
    ✓ $updateProps
    ✓ should add warn log when single is true

  CheckboxGroup.vue
    ✓ use
    ✓ should render correct contents (horizontal=false)
    ✓ should render correct contents (horizontal=true)
    ✓ should change v-model value

  Checkbox.vue
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  DatePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when configured startColumn and columnCount
    ✓ should render correct contents when configured format
    ✓ should trigger events
    ✓ should call methods
    ✓ $updateProps
    ✓ should add warn log when single is true

  Dialog
    Dialog.vue
      ✓ use
      ✓ should render correct contents - icon
      ✓ should render correct contents - title
      ✓ should render correct contents - alert
      ✓ should render correct contents - confirm
      ✓ should render correct contents - confirmBtn/cancelBtn
      ✓ should trigger events
      ✓ should not trigger events when btn is disabled
    Dialog API
      ✓ $createDialog API

  Drawer
    ✓ use
    ✓ should render correct contents
    ✓ should trigger events

  Form.vue
    ✓ use
    ✓ should render correct contents
    ✓ should validate & reset correctly
    ✓ should validate & reset correctly - async validate
    ✓ should validate correctly - trigger blur
    ✓ should validate correctly - debounce
    ✓ should trigger events

  IndexList
    IndexList.vue
      ✓ use
      ✓ should render correct contents
      ✓ should trigger events
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-up-load" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-up
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-down-refresh" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-down

Travis tests have failed
Hey @dolymood,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
Node.js: 6

     npm test

><EMAIL_ADDRESS>test /home/travis/build/didi/cube-ui
> npm run unit && npm run codecov

><EMAIL_ADDRESS>unit /home/travis/build/didi/cube-ui
> cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run

(node:3375) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
26 06 2018 11:13:21.641:INFO [karma]: Karma v1.7.1 server started at http://<IP_ADDRESS>:9876/
26 06 2018 11:13:21.643:INFO [launcher]: Launching browser PhantomJS_mobile with unlimited concurrency
26 06 2018 11:13:21.733:INFO [launcher]: Starting browser PhantomJS
26 06 2018 11:13:26.144:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket zDIitx2eZQvBRVfAAAAA with id 61773830
PhantomJS 2.1.1 (Linux 0.0.0) INFO LOG: 'You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html'

  ActionSheet
    ActionSheet.vue
      ✓ use
      ✓ should render correct contents
      ✓ should render correct contents - no data
      ✓ should render correct contents - picker style
      ✓ should trigger events
    ActionSheet API
      ✓ $createActionSheet API

  Button.vue
    ✓ use
    ✓ should render correct contents
    ✓ props
    ✓ events-called
    ✓ events-no-called

  CascadePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should trigger events
    ✓ should call methods
    ✓ should support async cascade
    ✓ $updateProps
    ✓ should add warn log when single is true

  CheckboxGroup.vue
    ✓ use
    ✓ should render correct contents (horizontal=false)
    ✓ should render correct contents (horizontal=true)
    ✓ should change v-model value

  Checkbox.vue
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  DatePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when configured startColumn and columnCount
    ✓ should render correct contents when configured format
    ✓ should trigger events
    ✓ should call methods
    ✓ $updateProps
    ✓ should add warn log when single is true

  Dialog
    Dialog.vue
      ✓ use
      ✓ should render correct contents - icon
      ✓ should render correct contents - title
      ✓ should render correct contents - alert
      ✓ should render correct contents - confirm
      ✓ should render correct contents - confirmBtn/cancelBtn
      ✓ should trigger events
      ✓ should not trigger events when btn is disabled
    Dialog API
      ✓ $createDialog API

  Drawer
    ✓ use
    ✓ should render correct contents
    ✓ should trigger events

  Form.vue
    ✓ use
    ✓ should render correct contents
    ✓ should validate & reset correctly
    ✓ should validate & reset correctly - async validate
    ✓ should validate correctly - trigger blur
    ✓ should validate correctly - debounce
    ✓ should trigger events

  IndexList
    IndexList.vue
      ✓ use
      ✓ should render correct contents
      ✓ should trigger events
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-up-load" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-up
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-down-refresh" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-down
      ✓ should fixed title
      ✓ should not have navbar when navbar prop is false
      ✓ run normal when group or item undefined
      ✓ should handle condition of unexpected param

  Input.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not show clear button when no text
    ✓ should show clear button when has text
    ✓ value should be empty when clear button clicked
    ✓ should support more native props
    ✓ should show password eye and work correctly
    ✓ should trigger events

  Loading.vue
    ✓ use
    ✓ should render correct contents - no size
    ✓ should render correct contents - with size

  Picker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should toggle by change v-model visible
    ✓ should trigger events
    ✓ should refill correct
    ✓ should add warn log when single is true
    ✓ setData when picker is invisible
    ✓ setData when picker is visible

  Popup
    Popup.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents
      ✓ should toggle by change v-model visible
      ✓ events
    Popup API
      ✓ $createPopup API

  Radio.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - horizontal
    ✓ should toggle v-model value
    ✓ v-model should be a number value

  Rate.vue
    ✓ use
    ✓ should render correct contents
    ✓ should trigger change event
    ✓ should trigger change event with click

  ScrollNavBar
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - vertical
    ✓ should trigger events

  ScrollNav
    ✓ use
    ✓ should render correct contents
    ✗ should render correct contents - sideStyle
	AssertionError: expected '★热门城市' to equal 'A' (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ should sticky & nav correctly
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly 6 times, but it was called 7 times
	    spy(★热门城市) at changeHandler@[native code]
	    spy(C) at changeHandler@[native code]
	    spy(E) at changeHandler@[native code]
	    spy(F) at changeHandler@[native code]
	    spy(G) at changeHandler@[native code]
	    spy(H) at changeHandler@[native code]
	    spy(G) at changeHandler@[native code] (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

  Scroll
    ✓ use
    ✓ should correct by default
    ✓ should render correct contents
    ✓ should trigger pullingDown
    ✓ should not trigger pullingDown
    ✓ should trigger pullingUp
    ✓ should not trigger pullingUp
    ✓ should trigger click
    ✓ should not trigger scroll events
    ✓ should trigger scroll events - with scroll-events
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-before-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
    ✓ should trigger scroll events - with listen-scroll
    ✓ should call correct method

  SegmentPicker
    ✓ use
    ✓ should render correct contents
    ✓ should correct by default
    ✓ should trigger events
    ✓ $updateProps
    ✓ should add warn log when single is true

  Select.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - update txt
    ✓ should trigger events

  Slide.vue
    ✓ use
    ✓ should render correct contents
    ✓ should clone nodes if loop is true
    ✓ should trigger events
    ✓ should trigger scroll-end but without change
    ✓ should go to right pageIndex if set initialIndex

  Sticky
    ✓ use
    ✓ should render correct contents
    ✓ should fixed ele
    ✓ should fixed ele - checkTop
    ✓ should trigger events

  Swipe
    ✓ use
    ✓ should render correct contents
    ✓ should shrink if the swipe width not enough
    ✓ should shrink if the last moving direction is right
    ✓ should shrink and not moved if the duration is more than momentumLimitTime and moving distance is less than momentumLimitDistance
    ✓ should shrink and not moved if y-axis distance is more than x-axis distance
    ✓ should grow if the swipe width enough
    ✓ should grow if the duration is less than momentumLimitTime and moving distance is more than momentumLimitDistance
    ✓ should not swipe out of the boundaries when swiping left
    ✓ should not swipe out of the boundaries when swiping right
    ✓ should trigger events
    ✓ should shrink if another swipe item active
    ✓ should do nothing if active the same swipe item
    ✓ should call refresh if the btns prop has changed
    ✓ should use default props if do not pass any prop

  Switch
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  Textarea.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not expand when blur
    ✓ should expand when focus, fold when blur
    ✓ should has remain when focus
    ✓ should change value
    ✓ should support more native props

  TimePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - no showNow
    ✓ should render correct contents - showNow text
    ✓ should trigger events
    ✓ should have correct args when select normal time
    ✓ should add warn log when sigle is true

  Tip.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents with offset[X]
    ✓ should be hidden after clicked content
    ✓ should be hidden after clicked close button

  Toast
    Toast.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents - time 0
      ✓ should render correct contents - with type
    Toast API
      ✓ $createToast API
      ✓ should trigger correct event

  Toolbar.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - more actions
    ✓ should trigger events

  Upload.vue
    ✓ use
    ✓ should render correct contents
    ✓ should add files & upload
    ✓ should remove file
    ✓ should start & pause upload
    ✓ should retry upload
    ✓ should trigger events

  Validator
    Validator.vue
      ✓ use
      ✓ should render correct contents - invalid
      ✓ should reset correctly
      ✓ should not validate when disabled
      ✓ should trigger events
    rules
      ✓ should be valid - no rule
      ✓ should be valid - unstated rule
      ✓ should be invalid - require: array
      ✓ should be invalid - type: string
      ✓ should be valid - type: string
      ✓ should be invalid - type: number
      ✓ should be valid - type: number
      ✓ should be invalid - type: array
      ✓ should be valid - type: array
      ✓ should be invalid - type: date
      ✓ should be valid - type: date
      ✓ should be invalid - type: email
      ✓ should be valid - type: email
      ✓ should be invalid - type: tel
      ✓ should be valid - type: tel
      ✓ should be invalid - type: url
      ✓ should be valid - type: url
      ✓ should be invalid - min: string
      ✓ should be valid - min: number
      ✓ should be valid - max: string
      ✓ should be invalid - max: number
      ✓ should be valid - len: string
      ✓ should be invalid - len: number
      ✓ should be invalid - notWhitespace
      ✓ should be invalid - pattern
      ✓ should be invalid - custom
    methods
      ✓ should add customized rule and message
      ✓ should rewrite raw type
      ✓ should change the language of default message

PhantomJS 2.1.1 (Linux 0.0.0): Executed 227 of 227 (2 FAILED) (48.046 secs / NaN secs)
TOTAL: 2 FAILED, 225 SUCCESS

1) should render correct contents - sideStyle
     ScrollNav
     AssertionError: expected '★热门城市' to equal 'A' (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

2) should trigger events
     ScrollNav
     AssertionError: expected spy to have been called exactly 6 times, but it was called 7 times
    spy(★热门城市) at changeHandler@[native code]
    spy(C) at changeHandler@[native code]
    spy(E) at changeHandler@[native code]
    spy(F) at changeHandler@[native code]
    spy(G) at changeHandler@[native code]
    spy(H) at changeHandler@[native code]
    spy(G) at changeHandler@[native code] (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

=============================== Coverage summary ===============================
Statements   : 96.29% ( 2493/2589 )
Branches     : 84.98% ( 1030/1212 )
Functions    : 95.18% ( 237/249 )
Lines        : 96.36% ( 2487/2581 )
================================================================================

npm ERR! Linux 4.14.12-041412-generic
npm ERR! argv "/home/travis/.nvm/versions/node/v6.14.3/bin/node" "/home/travis/.nvm/versions/node/v6.14.3/bin/npm" "run" "unit"
npm ERR! node v6.14.3
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR<EMAIL_ADDRESS>unit: `cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>unit script 'cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the cube-ui package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs cube-ui
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls cube-ui
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/travis/build/didi/cube-ui/npm-debug.log
npm ERR! Test failed.  See above for more details.

Travis tests have failed
Hey @dolymood,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
Node.js: 6

     npm test

><EMAIL_ADDRESS>test /home/travis/build/didi/cube-ui
> npm run unit && npm run codecov

><EMAIL_ADDRESS>unit /home/travis/build/didi/cube-ui
> cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run

(node:3375) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
26 06 2018 11:27:25.666:INFO [karma]: Karma v1.7.1 server started at http://<IP_ADDRESS>:9876/
26 06 2018 11:27:25.668:INFO [launcher]: Launching browser PhantomJS_mobile with unlimited concurrency
26 06 2018 11:27:25.760:INFO [launcher]: Starting browser PhantomJS
26 06 2018 11:27:30.286:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket o8fn6J9KvfCmK0k4AAAA with id 50231641
PhantomJS 2.1.1 (Linux 0.0.0) INFO LOG: 'You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html'

  ActionSheet
    ActionSheet.vue
      ✓ use
      ✓ should render correct contents
      ✓ should render correct contents - no data
      ✓ should render correct contents - picker style
      ✓ should trigger events
    ActionSheet API
      ✓ $createActionSheet API

  Button.vue
    ✓ use
    ✓ should render correct contents
    ✓ props
    ✓ events-called
    ✓ events-no-called

  CascadePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should trigger events
    ✓ should call methods
    ✓ should support async cascade
    ✓ $updateProps
    ✓ should add warn log when single is true

  CheckboxGroup.vue
    ✓ use
    ✓ should render correct contents (horizontal=false)
    ✓ should render correct contents (horizontal=true)
    ✓ should change v-model value

  Checkbox.vue
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  DatePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when configured startColumn and columnCount
    ✓ should render correct contents when configured format
    ✓ should trigger events
    ✓ should call methods
    ✓ $updateProps
    ✓ should add warn log when single is true

  Dialog
    Dialog.vue
      ✓ use
      ✓ should render correct contents - icon
      ✓ should render correct contents - title
      ✓ should render correct contents - alert
      ✓ should render correct contents - confirm
      ✓ should render correct contents - confirmBtn/cancelBtn
      ✓ should trigger events
      ✓ should not trigger events when btn is disabled
    Dialog API
      ✓ $createDialog API

  Drawer
    ✓ use
    ✓ should render correct contents
    ✓ should trigger events

  Form.vue
    ✓ use
    ✓ should render correct contents
    ✓ should validate & reset correctly
    ✓ should validate & reset correctly - async validate
    ✓ should validate correctly - trigger blur
    ✓ should validate correctly - debounce
    ✓ should trigger events

  IndexList
    IndexList.vue
      ✓ use
      ✓ should render correct contents
      ✓ should trigger events
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-up-load" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-up
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-down-refresh" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-down
      ✓ should fixed title
      ✓ should not have navbar when navbar prop is false
      ✓ run normal when group or item undefined
      ✓ should handle condition of unexpected param

  Input.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not show clear button when no text
    ✓ should show clear button when has text
    ✓ value should be empty when clear button clicked
    ✓ should support more native props
    ✓ should show password eye and work correctly
    ✓ should trigger events

  Loading.vue
    ✓ use
    ✓ should render correct contents - no size
    ✓ should render correct contents - with size

  Picker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should toggle by change v-model visible
    ✓ should trigger events
    ✓ should refill correct
    ✓ should add warn log when single is true
    ✓ setData when picker is invisible
    ✓ setData when picker is visible

  Popup
    Popup.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents
      ✓ should toggle by change v-model visible
      ✓ events
    Popup API
      ✓ $createPopup API

  Radio.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - horizontal
    ✓ should toggle v-model value
    ✓ v-model should be a number value

  Rate.vue
    ✓ use
    ✓ should render correct contents
    ✓ should trigger change event
    ✓ should trigger change event with click

  ScrollNavBar
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - vertical
    ✓ should trigger events

  ScrollNav
    ✓ use
    ✓ should render correct contents
    ✗ should render correct contents - sideStyle
	AssertionError: expected '★热门城市' to equal 'A' (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ should sticky & nav correctly
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly 6 times, but it was called 7 times
	    spy(★热门城市) at changeHandler@[native code]
	    spy(C) at changeHandler@[native code]
	    spy(E) at changeHandler@[native code]
	    spy(F) at changeHandler@[native code]
	    spy(G) at changeHandler@[native code]
	    spy(H) at changeHandler@[native code]
	    spy(G) at changeHandler@[native code] (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

  Scroll
    ✓ use
    ✓ should correct by default
    ✓ should render correct contents
    ✓ should trigger pullingDown
    ✓ should not trigger pullingDown
    ✓ should trigger pullingUp
    ✓ should not trigger pullingUp
    ✓ should trigger click
    ✓ should not trigger scroll events
    ✓ should trigger scroll events - with scroll-events
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-before-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
    ✓ should trigger scroll events - with listen-scroll
    ✓ should call correct method

  SegmentPicker
    ✓ use
    ✓ should render correct contents
    ✓ should correct by default
    ✓ should trigger events
    ✓ $updateProps
    ✓ should add warn log when single is true

  Select.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - update txt
    ✓ should trigger events

  Slide.vue
    ✓ use
    ✓ should render correct contents
    ✓ should clone nodes if loop is true
    ✓ should trigger events
    ✓ should trigger scroll-end but without change
    ✓ should go to right pageIndex if set initialIndex

  Sticky
    ✓ use
    ✓ should render correct contents
    ✓ should fixed ele
    ✓ should fixed ele - checkTop
    ✓ should trigger events

  Swipe
    ✓ use
    ✓ should render correct contents
    ✓ should shrink if the swipe width not enough
    ✓ should shrink if the last moving direction is right
    ✓ should shrink and not moved if the duration is more than momentumLimitTime and moving distance is less than momentumLimitDistance
    ✓ should shrink and not moved if y-axis distance is more than x-axis distance
    ✓ should grow if the swipe width enough
    ✓ should grow if the duration is less than momentumLimitTime and moving distance is more than momentumLimitDistance
    ✓ should not swipe out of the boundaries when swiping left
    ✓ should not swipe out of the boundaries when swiping right
    ✓ should trigger events
    ✓ should shrink if another swipe item active
    ✓ should do nothing if active the same swipe item
    ✓ should call refresh if the btns prop has changed
    ✓ should use default props if do not pass any prop

  Switch
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  Textarea.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not expand when blur
    ✓ should expand when focus, fold when blur
    ✓ should has remain when focus
    ✓ should change value
    ✓ should support more native props

  TimePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - no showNow
    ✓ should render correct contents - showNow text
    ✓ should trigger events
    ✓ should have correct args when select normal time
    ✓ should add warn log when sigle is true

  Tip.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents with offset[X]
    ✓ should be hidden after clicked content
    ✓ should be hidden after clicked close button

  Toast
    Toast.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents - time 0
      ✓ should render correct contents - with type
    Toast API
      ✓ $createToast API
      ✓ should trigger correct event

  Toolbar.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - more actions
    ✓ should trigger events

  Upload.vue
    ✓ use
    ✓ should render correct contents
    ✓ should add files & upload
    ✓ should remove file
    ✓ should start & pause upload
    ✓ should retry upload
    ✓ should trigger events

  Validator
    Validator.vue
      ✓ use
      ✓ should render correct contents - invalid
      ✓ should reset correctly
      ✓ should not validate when disabled
      ✓ should trigger events
    rules
      ✓ should be valid - no rule
      ✓ should be valid - unstated rule
      ✓ should be invalid - require: array
      ✓ should be invalid - type: string
      ✓ should be valid - type: string
      ✓ should be invalid - type: number
      ✓ should be valid - type: number
      ✓ should be invalid - type: array
      ✓ should be valid - type: array
      ✓ should be invalid - type: date
      ✓ should be valid - type: date
      ✓ should be invalid - type: email
      ✓ should be valid - type: email
      ✓ should be invalid - type: tel
      ✓ should be valid - type: tel
      ✓ should be invalid - type: url
      ✓ should be valid - type: url
      ✓ should be invalid - min: string
      ✓ should be valid - min: number
      ✓ should be valid - max: string
      ✓ should be invalid - max: number
      ✓ should be valid - len: string
      ✓ should be invalid - len: number
      ✓ should be invalid - notWhitespace
      ✓ should be invalid - pattern
      ✓ should be invalid - custom
    methods
      ✓ should add customized rule and message
      ✓ should rewrite raw type
      ✓ should change the language of default message

PhantomJS 2.1.1 (Linux 0.0.0): Executed 227 of 227 (2 FAILED) (48.486 secs / NaN secs)
TOTAL: 2 FAILED, 225 SUCCESS

1) should render correct contents - sideStyle
     ScrollNav
     AssertionError: expected '★热门城市' to equal 'A' (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

2) should trigger events
     ScrollNav
     AssertionError: expected spy to have been called exactly 6 times, but it was called 7 times
    spy(★热门城市) at changeHandler@[native code]
    spy(C) at changeHandler@[native code]
    spy(E) at changeHandler@[native code]
    spy(F) at changeHandler@[native code]
    spy(G) at changeHandler@[native code]
    spy(H) at changeHandler@[native code]
    spy(G) at changeHandler@[native code] (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

=============================== Coverage summary ===============================
Statements   : 96.25% ( 2492/2589 )
Branches     : 84.9% ( 1029/1212 )
Functions    : 95.18% ( 237/249 )
Lines        : 96.32% ( 2486/2581 )
================================================================================

npm ERR! Linux 4.14.12-041412-generic
npm ERR! argv "/home/travis/.nvm/versions/node/v6.14.3/bin/node" "/home/travis/.nvm/versions/node/v6.14.3/bin/npm" "run" "unit"
npm ERR! node v6.14.3
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR<EMAIL_ADDRESS>unit: `cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>unit script 'cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the cube-ui package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs cube-ui
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls cube-ui
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/travis/build/didi/cube-ui/npm-debug.log
npm ERR! Test failed.  See above for more details.

Travis tests have failed
Hey @dolymood,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.
Node.js: 6

     npm test

><EMAIL_ADDRESS>test /home/travis/build/didi/cube-ui
> npm run unit && npm run codecov

><EMAIL_ADDRESS>unit /home/travis/build/didi/cube-ui
> cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run

(node:3376) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
26 06 2018 11:39:24.686:INFO [karma]: Karma v1.7.1 server started at http://<IP_ADDRESS>:9876/
26 06 2018 11:39:24.690:INFO [launcher]: Launching browser PhantomJS_mobile with unlimited concurrency
26 06 2018 11:39:24.827:INFO [launcher]: Starting browser PhantomJS
26 06 2018 11:39:26.530:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket 7jSnr3RsRaa0n5GMAAAA with id 10171571
PhantomJS 2.1.1 (Linux 0.0.0) INFO LOG: 'You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html'

  ActionSheet
    ActionSheet.vue
      ✓ use
      ✓ should render correct contents
      ✓ should render correct contents - no data
      ✓ should render correct contents - picker style
      ✓ should trigger events
    ActionSheet API
      ✓ $createActionSheet API

  Button.vue
    ✓ use
    ✓ should render correct contents
    ✓ props
    ✓ events-called
    ✓ events-no-called

  CascadePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should trigger events
    ✓ should call methods
    ✓ should support async cascade
    ✓ $updateProps
    ✓ should add warn log when single is true

  CheckboxGroup.vue
    ✓ use
    ✓ should render correct contents (horizontal=false)
    ✓ should render correct contents (horizontal=true)
    ✓ should change v-model value

  Checkbox.vue
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  DatePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when configured startColumn and columnCount
    ✓ should render correct contents when configured format
    ✓ should trigger events
    ✓ should call methods
    ✓ $updateProps
    ✓ should add warn log when single is true

  Dialog
    Dialog.vue
      ✓ use
      ✓ should render correct contents - icon
      ✓ should render correct contents - title
      ✓ should render correct contents - alert
      ✓ should render correct contents - confirm
      ✓ should render correct contents - confirmBtn/cancelBtn
      ✓ should trigger events
      ✓ should not trigger events when btn is disabled
    Dialog API
      ✓ $createDialog API

  Drawer
    ✓ use
    ✓ should render correct contents
    ✓ should trigger events

  Form.vue
    ✓ use
    ✓ should render correct contents
    ✓ should validate & reset correctly
    ✓ should validate & reset correctly - async validate
    ✓ should validate correctly - trigger blur
    ✓ should validate correctly - debounce
    ✓ should trigger events

  IndexList
    IndexList.vue
      ✓ use
      ✓ should render correct contents
      ✓ should trigger events
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-up-load" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-up
WARN LOG: '[Cube tip]: <cube-index-list> The property "pull-down-refresh" is deprecated, please use the recommended property "options" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/index-list#cube-Propsconfiguration-anchor'
      ✓ should trigger pulling-down
      ✓ should fixed title
      ✓ should not have navbar when navbar prop is false
      ✓ run normal when group or item undefined
      ✓ should handle condition of unexpected param

  Input.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not show clear button when no text
    ✓ should show clear button when has text
    ✓ value should be empty when clear button clicked
    ✓ should support more native props
    ✓ should show password eye and work correctly
    ✓ should trigger events

  Loading.vue
    ✓ use
    ✓ should render correct contents - no size
    ✓ should render correct contents - with size

  Picker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents when use alias
    ✓ should toggle by change v-model visible
    ✓ should trigger events
    ✓ should refill correct
    ✓ should add warn log when single is true
    ✓ setData when picker is invisible
    ✓ setData when picker is visible

  Popup
    Popup.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents
      ✓ should toggle by change v-model visible
      ✓ events
    Popup API
      ✓ $createPopup API

  Radio.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - horizontal
    ✓ should toggle v-model value
    ✓ v-model should be a number value

  Rate.vue
    ✓ use
    ✓ should render correct contents
    ✓ should trigger change event
    ✓ should trigger change event with click

  ScrollNavBar
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - vertical
    ✓ should trigger events

  ScrollNav
    ✓ use
    ✓ should render correct contents
    ✗ should render correct contents - sideStyle
	AssertionError: expected '★热门城市' to equal 'A' (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

    ✓ should sticky & nav correctly
    ✗ should trigger events
	AssertionError: expected spy to have been called exactly 6 times, but it was called 7 times
	    spy(★热门城市) at changeHandler@[native code]
	    spy(C) at changeHandler@[native code]
	    spy(E) at changeHandler@[native code]
	    spy(F) at changeHandler@[native code]
	    spy(G) at changeHandler@[native code]
	    spy(H) at changeHandler@[native code]
	    spy(G) at changeHandler@[native code] (/home/travis/build/didi/cube-ui/node_modules/chai/chai.js:210)

  Scroll
    ✓ use
    ✓ should correct by default
    ✓ should render correct contents
    ✓ should trigger pullingDown
    ✓ should not trigger pullingDown
    ✓ should trigger pullingUp
    ✓ should not trigger pullingUp
    ✓ should trigger click
    ✓ should not trigger scroll events
    ✓ should trigger scroll events - with scroll-events
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
WARN LOG: '[Cube tip]: <cube-scroll> The property "listen-before-scroll" is deprecated, please use the recommended property "scroll-events" to replace it. Details could be found in https://didi.github.io/cube-ui/#/en-US/docs/scroll#cube-Propsconfiguration-anchor'
    ✓ should trigger scroll events - with listen-scroll
    ✓ should call correct method

  SegmentPicker
    ✓ use
    ✓ should render correct contents
    ✓ should correct by default
    ✓ should trigger events
    ✓ $updateProps
    ✓ should add warn log when single is true

  Select.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - update txt
    ✓ should trigger events

  Slide.vue
    ✓ use
    ✓ should render correct contents
    ✓ should clone nodes if loop is true
    ✓ should trigger events
    ✓ should trigger scroll-end but without change
    ✓ should go to right pageIndex if set initialIndex

  Sticky
    ✓ use
    ✓ should render correct contents
    ✓ should fixed ele
    ✓ should fixed ele - checkTop
    ✓ should trigger events

  Swipe
    ✓ use
    ✓ should render correct contents
    ✓ should shrink if the swipe width not enough
    ✓ should shrink if the last moving direction is right
    ✓ should shrink and not moved if the duration is more than momentumLimitTime and moving distance is less than momentumLimitDistance
    ✓ should shrink and not moved if y-axis distance is more than x-axis distance
    ✓ should grow if the swipe width enough
    ✓ should grow if the duration is less than momentumLimitTime and moving distance is more than momentumLimitDistance
    ✓ should not swipe out of the boundaries when swiping left
    ✓ should not swipe out of the boundaries when swiping right
    ✓ should trigger events
    ✓ should shrink if another swipe item active
    ✓ should do nothing if active the same swipe item
    ✓ should call refresh if the btns prop has changed
    ✓ should use default props if do not pass any prop

  Switch
    ✓ use
    ✓ should render correct contents
    ✓ should toggle v-model value

  Textarea.vue
    ✓ use
    ✓ should render correct contents
    ✓ should not expand when blur
    ✓ should expand when focus, fold when blur
    ✓ should has remain when focus
    ✓ should change value
    ✓ should support more native props

  TimePicker
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - no showNow
    ✓ should render correct contents - showNow text
    ✓ should trigger events
    ✓ should have correct args when select normal time
    ✓ should add warn log when sigle is true

  Tip.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents with offset[X]
    ✓ should be hidden after clicked content
    ✓ should be hidden after clicked close button

  Toast
    Toast.vue
      ✓ use
      ✓ should render correct contents - no type
      ✓ should render correct contents - time 0
      ✓ should render correct contents - with type
    Toast API
      ✓ $createToast API
      ✓ should trigger correct event

  Toolbar.vue
    ✓ use
    ✓ should render correct contents
    ✓ should render correct contents - more actions
    ✓ should trigger events

  Upload.vue
    ✓ use
    ✓ should render correct contents
    ✓ should add files & upload
    ✓ should remove file
    ✓ should start & pause upload
    ✓ should retry upload
    ✓ should trigger events

  Validator
    Validator.vue
      ✓ use
      ✓ should render correct contents - invalid
      ✓ should reset correctly
      ✓ should not validate when disabled
      ✓ should trigger events
    rules
      ✓ should be valid - no rule
      ✓ should be valid - unstated rule
      ✓ should be invalid - require: array
      ✓ should be invalid - type: string
      ✓ should be valid - type: string
      ✓ should be invalid - type: number
      ✓ should be valid - type: number
      ✓ should be invalid - type: array
      ✓ should be valid - type: array
      ✓ should be invalid - type: date
      ✓ should be valid - type: date
      ✓ should be invalid - type: email
      ✓ should be valid - type: email
      ✓ should be invalid - type: tel
      ✓ should be valid - type: tel
      ✓ should be invalid - type: url
      ✓ should be valid - type: url
      ✓ should be invalid - min: string
      ✓ should be valid - min: number
      ✓ should be valid - max: string
      ✓ should be invalid - max: number
      ✓ should be valid - len: string
      ✓ should be invalid - len: number
      ✓ should be invalid - notWhitespace
      ✓ should be invalid - pattern
      ✓ should be invalid - custom
    methods
      ✓ should add customized rule and message
      ✓ should rewrite raw type
      ✓ should change the language of default message