From 6a82895ce3f2a98e6aeb476cc658c7fc3bf05e2a Mon Sep 17 00:00:00 2001 From: eddyerburgh Date: Fri, 18 May 2018 22:10:45 +0100 Subject: [PATCH 1/9] docs: move to VuePress --- docs/.vuepress/config.js | 64 + docs/LANGS.md | 7 - docs/{en => }/README.md | 4 +- docs/{en => }/SUMMARY.md | 0 docs/{en => }/api/README.md | 0 docs/api/components.md | 87 + docs/{en => }/api/config.md | 0 docs/{en => }/api/createLocalVue.md | 0 docs/{en => }/api/mount.md | 0 docs/{en => }/api/options.md | 26 +- docs/{en => }/api/render.md | 0 docs/{en => }/api/renderToString.md | 0 docs/api/script.sh | 5 + docs/{en => }/api/selectors.md | 0 docs/{en => }/api/shallowMount.md | 0 docs/api/wrapper-array/README.md | 22 + docs/{en => }/api/wrapper-array/at.md | 2 +- docs/{en => }/api/wrapper-array/contains.md | 2 +- docs/{en => }/api/wrapper-array/destroy.md | 2 +- docs/{en => }/api/wrapper-array/filter.md | 2 +- docs/{en => }/api/wrapper-array/is.md | 2 +- docs/{en => }/api/wrapper-array/isEmpty.md | 2 +- docs/{en => }/api/wrapper-array/isVisible.md | 2 +- .../api/wrapper-array/isVueInstance.md | 2 +- docs/{en => }/api/wrapper-array/setData.md | 2 +- docs/{en => }/api/wrapper-array/setMethods.md | 2 +- docs/{en => }/api/wrapper-array/setProps.md | 2 +- docs/{en => }/api/wrapper-array/trigger.md | 2 +- docs/api/wrapper/README.md | 50 + docs/{en => }/api/wrapper/attributes.md | 2 +- docs/{en => }/api/wrapper/classes.md | 2 +- docs/{en => }/api/wrapper/contains.md | 2 +- docs/{en => }/api/wrapper/destroy.md | 2 +- docs/{en => }/api/wrapper/emitted.md | 4 +- docs/{en => }/api/wrapper/emittedByOrder.md | 2 +- docs/{en => }/api/wrapper/exists.md | 2 +- docs/{en => }/api/wrapper/find.md | 2 +- docs/{en => }/api/wrapper/findAll.md | 2 +- docs/{en => }/api/wrapper/html.md | 2 +- docs/{en => }/api/wrapper/is.md | 2 +- docs/{en => }/api/wrapper/isEmpty.md | 2 +- docs/{en => }/api/wrapper/isVisible.md | 2 +- docs/{en => }/api/wrapper/isVueInstance.md | 2 +- docs/{en => }/api/wrapper/name.md | 2 +- docs/{en => }/api/wrapper/props.md | 2 +- docs/{en => }/api/wrapper/setData.md | 2 +- docs/{en => }/api/wrapper/setMethods.md | 2 +- docs/{en => }/api/wrapper/setProps.md | 2 +- docs/{en => }/api/wrapper/text.md | 2 +- docs/{en => }/api/wrapper/trigger.md | 2 +- docs/book.json | 20 - docs/en/api/components/README.md | 5 - docs/en/api/components/RouterLinkStub.md | 20 - docs/en/api/components/TransitionGroupStub.md | 31 - docs/en/api/components/TransitionStub.md | 30 - docs/en/api/wrapper-array/README.md | 12 - docs/en/api/wrapper/README.md | 17 - docs/en/guides/README.md | 12 - docs/fr/README.md | 71 - docs/fr/SUMMARY.md | 67 - docs/fr/api/README.md | 57 - docs/fr/api/components/README.md | 5 - docs/fr/api/components/TransitionGroupStub.md | 31 - docs/fr/api/components/TransitionStub.md | 30 - docs/fr/api/config.md | 25 - docs/fr/api/createLocalVue.md | 27 - docs/fr/api/mount.md | 131 - docs/fr/api/options.md | 156 - docs/fr/api/selectors.md | 53 - docs/fr/api/shallow.md | 118 - docs/fr/api/wrapper-array/README.md | 11 - docs/fr/api/wrapper-array/at.md | 20 - docs/fr/api/wrapper-array/contains.md | 23 - docs/fr/api/wrapper-array/destroy.md | 16 - docs/fr/api/wrapper-array/hasAttribute.md | 20 - docs/fr/api/wrapper-array/hasClass.md | 19 - docs/fr/api/wrapper-array/hasProp.md | 23 - docs/fr/api/wrapper-array/is.md | 19 - docs/fr/api/wrapper-array/isEmpty.md | 16 - docs/fr/api/wrapper-array/isVueInstance.md | 17 - docs/fr/api/wrapper-array/setComputed.md | 26 - docs/fr/api/wrapper-array/setData.md | 21 - docs/fr/api/wrapper-array/setMethods.md | 26 - docs/fr/api/wrapper-array/setProps.md | 21 - docs/fr/api/wrapper-array/trigger.md | 25 - docs/fr/api/wrapper/README.md | 16 - docs/fr/api/wrapper/contains.md | 22 - docs/fr/api/wrapper/destroy.md | 19 - docs/fr/api/wrapper/emitted.md | 45 - docs/fr/api/wrapper/emittedByOrder.md | 27 - docs/fr/api/wrapper/exists.md | 20 - docs/fr/api/wrapper/find.md | 26 - docs/fr/api/wrapper/findAll.md | 26 - docs/fr/api/wrapper/hasAttribute.md | 35 - docs/fr/api/wrapper/hasClass.md | 20 - docs/fr/api/wrapper/hasProp.md | 24 - docs/fr/api/wrapper/html.md | 15 - docs/fr/api/wrapper/is.md | 18 - docs/fr/api/wrapper/isEmpty.md | 15 - docs/fr/api/wrapper/isVueInstance.md | 15 - docs/fr/api/wrapper/name.md | 17 - docs/fr/api/wrapper/setData.md | 19 - docs/fr/api/wrapper/setMethods.md | 23 - docs/fr/api/wrapper/setProps.md | 46 - docs/fr/api/wrapper/text.md | 15 - docs/fr/api/wrapper/trigger.md | 31 - docs/fr/guides/README.md | 10 - docs/fr/guides/choosing-a-test-runner.md | 45 - docs/fr/guides/common-tips.md | 132 - docs/fr/guides/dom-events.md | 195 - docs/fr/guides/getting-started.md | 144 - docs/fr/guides/testing-SFCs-with-jest.md | 178 - .../guides/testing-SFCs-with-mocha-webpack.md | 180 - docs/fr/guides/using-with-vue-router.md | 72 - docs/fr/guides/using-with-vuex.md | 265 -- docs/guides/README.md | 12 + .../{en => }/guides/choosing-a-test-runner.md | 8 +- docs/{en => }/guides/common-tips.md | 20 +- docs/{en => }/guides/dom-events.md | 12 +- docs/{en => }/guides/getting-started.md | 6 +- .../{en => }/guides/testing-SFCs-with-jest.md | 20 +- .../guides/testing-SFCs-with-karma.md | 4 +- .../guides/testing-SFCs-with-mocha-webpack.md | 4 +- .../guides/testing-async-components.md | 2 +- docs/{en => }/guides/using-with-vue-router.md | 10 +- docs/{en => }/guides/using-with-vuex.md | 8 +- docs/kr/README.md | 71 - docs/kr/SUMMARY.md | 64 - docs/kr/api/README.md | 45 - docs/kr/api/components/README.md | 5 - docs/kr/api/components/TransitionGroupStub.md | 32 - docs/kr/api/components/TransitionStub.md | 33 - docs/kr/api/config.md | 25 - docs/kr/api/createLocalVue.md | 27 - docs/kr/api/mount.md | 130 - docs/kr/api/options.md | 149 - docs/kr/api/selectors.md | 53 - docs/kr/api/shallow.md | 118 - docs/kr/api/wrapper-array/README.md | 11 - docs/kr/api/wrapper-array/at.md | 20 - docs/kr/api/wrapper-array/contains.md | 23 - docs/kr/api/wrapper-array/destroy.md | 17 - docs/kr/api/wrapper-array/hasAttribute.md | 20 - docs/kr/api/wrapper-array/hasClass.md | 19 - docs/kr/api/wrapper-array/hasProp.md | 23 - docs/kr/api/wrapper-array/is.md | 19 - docs/kr/api/wrapper-array/isEmpty.md | 16 - docs/kr/api/wrapper-array/isVueInstance.md | 17 - docs/kr/api/wrapper-array/setComputed.md | 26 - docs/kr/api/wrapper-array/setData.md | 21 - docs/kr/api/wrapper-array/setMethods.md | 26 - docs/kr/api/wrapper-array/setProps.md | 21 - docs/kr/api/wrapper-array/trigger.md | 25 - docs/kr/api/wrapper/README.md | 19 - docs/kr/api/wrapper/contains.md | 22 - docs/kr/api/wrapper/destroy.md | 19 - docs/kr/api/wrapper/emitted.md | 32 - docs/kr/api/wrapper/emittedByOrder.md | 27 - docs/kr/api/wrapper/exists.md | 20 - docs/kr/api/wrapper/find.md | 26 - docs/kr/api/wrapper/findAll.md | 26 - docs/kr/api/wrapper/hasAttribute.md | 35 - docs/kr/api/wrapper/hasClass.md | 20 - docs/kr/api/wrapper/hasProp.md | 23 - docs/kr/api/wrapper/html.md | 15 - docs/kr/api/wrapper/is.md | 18 - docs/kr/api/wrapper/isEmpty.md | 15 - docs/kr/api/wrapper/isVueInstance.md | 15 - docs/kr/api/wrapper/name.md | 17 - docs/kr/api/wrapper/setData.md | 19 - docs/kr/api/wrapper/setMethods.md | 23 - docs/kr/api/wrapper/setProps.md | 46 - docs/kr/api/wrapper/text.md | 15 - docs/kr/api/wrapper/trigger.md | 30 - docs/kr/guides/README.md | 11 - docs/kr/guides/choosing-a-test-runner.md | 45 - docs/kr/guides/common-tips.md | 133 - docs/kr/guides/dom-events.md | 194 - docs/kr/guides/getting-started.md | 149 - docs/kr/guides/testing-SFCs-with-jest.md | 179 - .../guides/testing-SFCs-with-mocha-webpack.md | 180 - docs/kr/guides/using-with-vue-router.md | 72 - docs/kr/guides/using-with-vuex.md | 265 -- docs/pt-br/README.md | 71 - docs/pt-br/SUMMARY.md | 66 - docs/pt-br/api/README.md | 57 - docs/pt-br/api/components/README.md | 5 - .../api/components/TransitionGroupStub.md | 31 - docs/pt-br/api/components/TransitionStub.md | 31 - docs/pt-br/api/config.md | 25 - docs/pt-br/api/createLocalVue.md | 29 - docs/pt-br/api/mount.md | 132 - docs/pt-br/api/options.md | 150 - docs/pt-br/api/selectors.md | 42 - docs/pt-br/api/shallow.md | 118 - docs/pt-br/api/wrapper-array/README.md | 11 - docs/pt-br/api/wrapper-array/at.md | 21 - docs/pt-br/api/wrapper-array/contains.md | 24 - docs/pt-br/api/wrapper-array/destroy.md | 18 - docs/pt-br/api/wrapper-array/hasAttribute.md | 21 - docs/pt-br/api/wrapper-array/hasClass.md | 20 - docs/pt-br/api/wrapper-array/hasProp.md | 24 - docs/pt-br/api/wrapper-array/is.md | 20 - docs/pt-br/api/wrapper-array/isEmpty.md | 17 - docs/pt-br/api/wrapper-array/isVueInstance.md | 18 - docs/pt-br/api/wrapper-array/setComputed.md | 25 - docs/pt-br/api/wrapper-array/setData.md | 22 - docs/pt-br/api/wrapper-array/setMethods.md | 25 - docs/pt-br/api/wrapper-array/setProps.md | 22 - docs/pt-br/api/wrapper-array/trigger.md | 26 - docs/pt-br/api/wrapper/README.md | 17 - docs/pt-br/api/wrapper/contains.md | 22 - docs/pt-br/api/wrapper/destroy.md | 21 - docs/pt-br/api/wrapper/emitted.md | 32 - docs/pt-br/api/wrapper/emittedByOrder.md | 27 - docs/pt-br/api/wrapper/exists.md | 21 - docs/pt-br/api/wrapper/find.md | 28 - docs/pt-br/api/wrapper/findAll.md | 28 - docs/pt-br/api/wrapper/hasAttribute.md | 36 - docs/pt-br/api/wrapper/hasClass.md | 20 - docs/pt-br/api/wrapper/hasProp.md | 23 - docs/pt-br/api/wrapper/html.md | 15 - docs/pt-br/api/wrapper/is.md | 18 - docs/pt-br/api/wrapper/isEmpty.md | 15 - docs/pt-br/api/wrapper/isVueInstance.md | 15 - docs/pt-br/api/wrapper/name.md | 17 - docs/pt-br/api/wrapper/setData.md | 19 - docs/pt-br/api/wrapper/setMethods.md | 23 - docs/pt-br/api/wrapper/setProps.md | 46 - docs/pt-br/api/wrapper/text.md | 15 - docs/pt-br/api/wrapper/trigger.md | 30 - docs/pt-br/guides/README.md | 9 - docs/pt-br/guides/choosing-a-test-runner.md | 46 - docs/pt-br/guides/common-tips.md | 136 - docs/pt-br/guides/dom-events.md | 194 - docs/pt-br/guides/getting-started.md | 116 - docs/pt-br/guides/testing-SFCs-with-jest.md | 182 - .../guides/testing-SFCs-with-mocha-webpack.md | 180 - docs/pt-br/guides/using-with-vue-router.md | 72 - docs/pt-br/guides/using-with-vuex.md | 266 -- docs/ru/README.md | 71 - docs/ru/SUMMARY.md | 66 - docs/ru/api/README.md | 56 - docs/ru/api/components/README.md | 5 - docs/ru/api/components/TransitionGroupStub.md | 31 - docs/ru/api/components/TransitionStub.md | 30 - docs/ru/api/config.md | 26 - docs/ru/api/createLocalVue.md | 27 - docs/ru/api/mount.md | 130 - docs/ru/api/options.md | 197 - docs/ru/api/selectors.md | 60 - docs/ru/api/shallow.md | 114 - docs/ru/api/wrapper-array/README.md | 12 - docs/ru/api/wrapper-array/at.md | 20 - docs/ru/api/wrapper-array/contains.md | 23 - docs/ru/api/wrapper-array/destroy.md | 16 - docs/ru/api/wrapper-array/is.md | 19 - docs/ru/api/wrapper-array/isEmpty.md | 16 - docs/ru/api/wrapper-array/isVueInstance.md | 17 - docs/ru/api/wrapper-array/setComputed.md | 25 - docs/ru/api/wrapper-array/setData.md | 21 - docs/ru/api/wrapper-array/setMethods.md | 26 - docs/ru/api/wrapper-array/setProps.md | 21 - docs/ru/api/wrapper-array/trigger.md | 25 - docs/ru/api/wrapper/README.md | 16 - docs/ru/api/wrapper/attributes.md | 15 - docs/ru/api/wrapper/classes.md | 17 - docs/ru/api/wrapper/contains.md | 22 - docs/ru/api/wrapper/destroy.md | 19 - docs/ru/api/wrapper/emitted.md | 57 - docs/ru/api/wrapper/emittedByOrder.md | 27 - docs/ru/api/wrapper/exists.md | 20 - docs/ru/api/wrapper/find.md | 26 - docs/ru/api/wrapper/findAll.md | 26 - docs/ru/api/wrapper/html.md | 15 - docs/ru/api/wrapper/is.md | 18 - docs/ru/api/wrapper/isEmpty.md | 15 - docs/ru/api/wrapper/isVueInstance.md | 15 - docs/ru/api/wrapper/name.md | 17 - docs/ru/api/wrapper/props.md | 21 - docs/ru/api/wrapper/setData.md | 19 - docs/ru/api/wrapper/setMethods.md | 23 - docs/ru/api/wrapper/setProps.md | 46 - docs/ru/api/wrapper/text.md | 15 - docs/ru/api/wrapper/trigger.md | 44 - docs/ru/guides/README.md | 10 - docs/ru/guides/choosing-a-test-runner.md | 46 - docs/ru/guides/common-tips.md | 135 - docs/ru/guides/dom-events.md | 210 - docs/ru/guides/getting-started.md | 144 - docs/ru/guides/testing-SFCs-with-jest.md | 212 - .../guides/testing-SFCs-with-mocha-webpack.md | 184 - docs/ru/guides/testing-async-components.md | 97 - docs/ru/guides/using-with-vue-router.md | 79 - docs/ru/guides/using-with-vuex.md | 265 -- package.json | 11 +- yarn.lock | 3731 +++++++++++------ 297 files changed, 2794 insertions(+), 12778 deletions(-) create mode 100644 docs/.vuepress/config.js delete mode 100644 docs/LANGS.md rename docs/{en => }/README.md (97%) rename docs/{en => }/SUMMARY.md (100%) rename docs/{en => }/api/README.md (100%) create mode 100644 docs/api/components.md rename docs/{en => }/api/config.md (100%) rename docs/{en => }/api/createLocalVue.md (100%) rename docs/{en => }/api/mount.md (100%) rename docs/{en => }/api/options.md (95%) rename docs/{en => }/api/render.md (100%) rename docs/{en => }/api/renderToString.md (100%) create mode 100755 docs/api/script.sh rename docs/{en => }/api/selectors.md (100%) rename docs/{en => }/api/shallowMount.md (100%) create mode 100644 docs/api/wrapper-array/README.md rename docs/{en => }/api/wrapper-array/at.md (96%) rename docs/{en => }/api/wrapper-array/contains.md (95%) rename docs/{en => }/api/wrapper-array/destroy.md (95%) rename docs/{en => }/api/wrapper-array/filter.md (96%) rename docs/{en => }/api/wrapper-array/is.md (95%) rename docs/{en => }/api/wrapper-array/isEmpty.md (95%) rename docs/{en => }/api/wrapper-array/isVisible.md (97%) rename docs/{en => }/api/wrapper-array/isVueInstance.md (94%) rename docs/{en => }/api/wrapper-array/setData.md (96%) rename docs/{en => }/api/wrapper-array/setMethods.md (95%) rename docs/{en => }/api/wrapper-array/setProps.md (95%) rename docs/{en => }/api/wrapper-array/trigger.md (93%) create mode 100644 docs/api/wrapper/README.md rename docs/{en => }/api/wrapper/attributes.md (93%) rename docs/{en => }/api/wrapper/classes.md (95%) rename docs/{en => }/api/wrapper/contains.md (95%) rename docs/{en => }/api/wrapper/destroy.md (94%) rename docs/{en => }/api/wrapper/emitted.md (86%) rename docs/{en => }/api/wrapper/emittedByOrder.md (96%) rename docs/{en => }/api/wrapper/exists.md (97%) rename docs/{en => }/api/wrapper/find.md (97%) rename docs/{en => }/api/wrapper/findAll.md (95%) rename docs/{en => }/api/wrapper/html.md (95%) rename docs/{en => }/api/wrapper/is.md (94%) rename docs/{en => }/api/wrapper/isEmpty.md (94%) rename docs/{en => }/api/wrapper/isVisible.md (96%) rename docs/{en => }/api/wrapper/isVueInstance.md (92%) rename docs/{en => }/api/wrapper/name.md (97%) rename docs/{en => }/api/wrapper/props.md (96%) rename docs/{en => }/api/wrapper/setData.md (94%) rename docs/{en => }/api/wrapper/setMethods.md (95%) rename docs/{en => }/api/wrapper/setProps.md (97%) rename docs/{en => }/api/wrapper/text.md (95%) rename docs/{en => }/api/wrapper/trigger.md (96%) delete mode 100644 docs/book.json delete mode 100644 docs/en/api/components/README.md delete mode 100644 docs/en/api/components/RouterLinkStub.md delete mode 100644 docs/en/api/components/TransitionGroupStub.md delete mode 100644 docs/en/api/components/TransitionStub.md delete mode 100644 docs/en/api/wrapper-array/README.md delete mode 100644 docs/en/api/wrapper/README.md delete mode 100644 docs/en/guides/README.md delete mode 100644 docs/fr/README.md delete mode 100644 docs/fr/SUMMARY.md delete mode 100644 docs/fr/api/README.md delete mode 100644 docs/fr/api/components/README.md delete mode 100644 docs/fr/api/components/TransitionGroupStub.md delete mode 100644 docs/fr/api/components/TransitionStub.md delete mode 100644 docs/fr/api/config.md delete mode 100644 docs/fr/api/createLocalVue.md delete mode 100644 docs/fr/api/mount.md delete mode 100644 docs/fr/api/options.md delete mode 100644 docs/fr/api/selectors.md delete mode 100644 docs/fr/api/shallow.md delete mode 100644 docs/fr/api/wrapper-array/README.md delete mode 100644 docs/fr/api/wrapper-array/at.md delete mode 100644 docs/fr/api/wrapper-array/contains.md delete mode 100644 docs/fr/api/wrapper-array/destroy.md delete mode 100644 docs/fr/api/wrapper-array/hasAttribute.md delete mode 100644 docs/fr/api/wrapper-array/hasClass.md delete mode 100644 docs/fr/api/wrapper-array/hasProp.md delete mode 100644 docs/fr/api/wrapper-array/is.md delete mode 100644 docs/fr/api/wrapper-array/isEmpty.md delete mode 100644 docs/fr/api/wrapper-array/isVueInstance.md delete mode 100644 docs/fr/api/wrapper-array/setComputed.md delete mode 100644 docs/fr/api/wrapper-array/setData.md delete mode 100644 docs/fr/api/wrapper-array/setMethods.md delete mode 100644 docs/fr/api/wrapper-array/setProps.md delete mode 100644 docs/fr/api/wrapper-array/trigger.md delete mode 100644 docs/fr/api/wrapper/README.md delete mode 100644 docs/fr/api/wrapper/contains.md delete mode 100644 docs/fr/api/wrapper/destroy.md delete mode 100644 docs/fr/api/wrapper/emitted.md delete mode 100644 docs/fr/api/wrapper/emittedByOrder.md delete mode 100644 docs/fr/api/wrapper/exists.md delete mode 100644 docs/fr/api/wrapper/find.md delete mode 100644 docs/fr/api/wrapper/findAll.md delete mode 100644 docs/fr/api/wrapper/hasAttribute.md delete mode 100644 docs/fr/api/wrapper/hasClass.md delete mode 100644 docs/fr/api/wrapper/hasProp.md delete mode 100644 docs/fr/api/wrapper/html.md delete mode 100644 docs/fr/api/wrapper/is.md delete mode 100644 docs/fr/api/wrapper/isEmpty.md delete mode 100644 docs/fr/api/wrapper/isVueInstance.md delete mode 100644 docs/fr/api/wrapper/name.md delete mode 100644 docs/fr/api/wrapper/setData.md delete mode 100644 docs/fr/api/wrapper/setMethods.md delete mode 100644 docs/fr/api/wrapper/setProps.md delete mode 100644 docs/fr/api/wrapper/text.md delete mode 100644 docs/fr/api/wrapper/trigger.md delete mode 100644 docs/fr/guides/README.md delete mode 100644 docs/fr/guides/choosing-a-test-runner.md delete mode 100644 docs/fr/guides/common-tips.md delete mode 100644 docs/fr/guides/dom-events.md delete mode 100644 docs/fr/guides/getting-started.md delete mode 100644 docs/fr/guides/testing-SFCs-with-jest.md delete mode 100644 docs/fr/guides/testing-SFCs-with-mocha-webpack.md delete mode 100644 docs/fr/guides/using-with-vue-router.md delete mode 100644 docs/fr/guides/using-with-vuex.md create mode 100644 docs/guides/README.md rename docs/{en => }/guides/choosing-a-test-runner.md (96%) rename docs/{en => }/guides/common-tips.md (95%) rename docs/{en => }/guides/dom-events.md (96%) rename docs/{en => }/guides/getting-started.md (99%) rename docs/{en => }/guides/testing-SFCs-with-jest.md (96%) rename docs/{en => }/guides/testing-SFCs-with-karma.md (98%) rename docs/{en => }/guides/testing-SFCs-with-mocha-webpack.md (98%) rename docs/{en => }/guides/testing-async-components.md (99%) rename docs/{en => }/guides/using-with-vue-router.md (92%) rename docs/{en => }/guides/using-with-vuex.md (99%) delete mode 100644 docs/kr/README.md delete mode 100644 docs/kr/SUMMARY.md delete mode 100644 docs/kr/api/README.md delete mode 100644 docs/kr/api/components/README.md delete mode 100644 docs/kr/api/components/TransitionGroupStub.md delete mode 100644 docs/kr/api/components/TransitionStub.md delete mode 100644 docs/kr/api/config.md delete mode 100644 docs/kr/api/createLocalVue.md delete mode 100644 docs/kr/api/mount.md delete mode 100644 docs/kr/api/options.md delete mode 100644 docs/kr/api/selectors.md delete mode 100644 docs/kr/api/shallow.md delete mode 100644 docs/kr/api/wrapper-array/README.md delete mode 100644 docs/kr/api/wrapper-array/at.md delete mode 100644 docs/kr/api/wrapper-array/contains.md delete mode 100644 docs/kr/api/wrapper-array/destroy.md delete mode 100644 docs/kr/api/wrapper-array/hasAttribute.md delete mode 100644 docs/kr/api/wrapper-array/hasClass.md delete mode 100644 docs/kr/api/wrapper-array/hasProp.md delete mode 100644 docs/kr/api/wrapper-array/is.md delete mode 100644 docs/kr/api/wrapper-array/isEmpty.md delete mode 100644 docs/kr/api/wrapper-array/isVueInstance.md delete mode 100644 docs/kr/api/wrapper-array/setComputed.md delete mode 100644 docs/kr/api/wrapper-array/setData.md delete mode 100644 docs/kr/api/wrapper-array/setMethods.md delete mode 100644 docs/kr/api/wrapper-array/setProps.md delete mode 100644 docs/kr/api/wrapper-array/trigger.md delete mode 100644 docs/kr/api/wrapper/README.md delete mode 100644 docs/kr/api/wrapper/contains.md delete mode 100644 docs/kr/api/wrapper/destroy.md delete mode 100644 docs/kr/api/wrapper/emitted.md delete mode 100644 docs/kr/api/wrapper/emittedByOrder.md delete mode 100644 docs/kr/api/wrapper/exists.md delete mode 100644 docs/kr/api/wrapper/find.md delete mode 100644 docs/kr/api/wrapper/findAll.md delete mode 100644 docs/kr/api/wrapper/hasAttribute.md delete mode 100644 docs/kr/api/wrapper/hasClass.md delete mode 100644 docs/kr/api/wrapper/hasProp.md delete mode 100644 docs/kr/api/wrapper/html.md delete mode 100644 docs/kr/api/wrapper/is.md delete mode 100644 docs/kr/api/wrapper/isEmpty.md delete mode 100644 docs/kr/api/wrapper/isVueInstance.md delete mode 100644 docs/kr/api/wrapper/name.md delete mode 100644 docs/kr/api/wrapper/setData.md delete mode 100644 docs/kr/api/wrapper/setMethods.md delete mode 100644 docs/kr/api/wrapper/setProps.md delete mode 100644 docs/kr/api/wrapper/text.md delete mode 100644 docs/kr/api/wrapper/trigger.md delete mode 100644 docs/kr/guides/README.md delete mode 100644 docs/kr/guides/choosing-a-test-runner.md delete mode 100644 docs/kr/guides/common-tips.md delete mode 100644 docs/kr/guides/dom-events.md delete mode 100644 docs/kr/guides/getting-started.md delete mode 100644 docs/kr/guides/testing-SFCs-with-jest.md delete mode 100644 docs/kr/guides/testing-SFCs-with-mocha-webpack.md delete mode 100644 docs/kr/guides/using-with-vue-router.md delete mode 100644 docs/kr/guides/using-with-vuex.md delete mode 100644 docs/pt-br/README.md delete mode 100644 docs/pt-br/SUMMARY.md delete mode 100644 docs/pt-br/api/README.md delete mode 100644 docs/pt-br/api/components/README.md delete mode 100644 docs/pt-br/api/components/TransitionGroupStub.md delete mode 100644 docs/pt-br/api/components/TransitionStub.md delete mode 100644 docs/pt-br/api/config.md delete mode 100644 docs/pt-br/api/createLocalVue.md delete mode 100644 docs/pt-br/api/mount.md delete mode 100644 docs/pt-br/api/options.md delete mode 100644 docs/pt-br/api/selectors.md delete mode 100644 docs/pt-br/api/shallow.md delete mode 100644 docs/pt-br/api/wrapper-array/README.md delete mode 100644 docs/pt-br/api/wrapper-array/at.md delete mode 100644 docs/pt-br/api/wrapper-array/contains.md delete mode 100644 docs/pt-br/api/wrapper-array/destroy.md delete mode 100644 docs/pt-br/api/wrapper-array/hasAttribute.md delete mode 100644 docs/pt-br/api/wrapper-array/hasClass.md delete mode 100644 docs/pt-br/api/wrapper-array/hasProp.md delete mode 100644 docs/pt-br/api/wrapper-array/is.md delete mode 100644 docs/pt-br/api/wrapper-array/isEmpty.md delete mode 100644 docs/pt-br/api/wrapper-array/isVueInstance.md delete mode 100644 docs/pt-br/api/wrapper-array/setComputed.md delete mode 100644 docs/pt-br/api/wrapper-array/setData.md delete mode 100644 docs/pt-br/api/wrapper-array/setMethods.md delete mode 100644 docs/pt-br/api/wrapper-array/setProps.md delete mode 100644 docs/pt-br/api/wrapper-array/trigger.md delete mode 100644 docs/pt-br/api/wrapper/README.md delete mode 100644 docs/pt-br/api/wrapper/contains.md delete mode 100644 docs/pt-br/api/wrapper/destroy.md delete mode 100644 docs/pt-br/api/wrapper/emitted.md delete mode 100644 docs/pt-br/api/wrapper/emittedByOrder.md delete mode 100644 docs/pt-br/api/wrapper/exists.md delete mode 100644 docs/pt-br/api/wrapper/find.md delete mode 100644 docs/pt-br/api/wrapper/findAll.md delete mode 100644 docs/pt-br/api/wrapper/hasAttribute.md delete mode 100644 docs/pt-br/api/wrapper/hasClass.md delete mode 100644 docs/pt-br/api/wrapper/hasProp.md delete mode 100644 docs/pt-br/api/wrapper/html.md delete mode 100644 docs/pt-br/api/wrapper/is.md delete mode 100644 docs/pt-br/api/wrapper/isEmpty.md delete mode 100644 docs/pt-br/api/wrapper/isVueInstance.md delete mode 100644 docs/pt-br/api/wrapper/name.md delete mode 100644 docs/pt-br/api/wrapper/setData.md delete mode 100644 docs/pt-br/api/wrapper/setMethods.md delete mode 100644 docs/pt-br/api/wrapper/setProps.md delete mode 100644 docs/pt-br/api/wrapper/text.md delete mode 100644 docs/pt-br/api/wrapper/trigger.md delete mode 100644 docs/pt-br/guides/README.md delete mode 100644 docs/pt-br/guides/choosing-a-test-runner.md delete mode 100644 docs/pt-br/guides/common-tips.md delete mode 100644 docs/pt-br/guides/dom-events.md delete mode 100644 docs/pt-br/guides/getting-started.md delete mode 100644 docs/pt-br/guides/testing-SFCs-with-jest.md delete mode 100644 docs/pt-br/guides/testing-SFCs-with-mocha-webpack.md delete mode 100644 docs/pt-br/guides/using-with-vue-router.md delete mode 100644 docs/pt-br/guides/using-with-vuex.md delete mode 100644 docs/ru/README.md delete mode 100644 docs/ru/SUMMARY.md delete mode 100644 docs/ru/api/README.md delete mode 100644 docs/ru/api/components/README.md delete mode 100644 docs/ru/api/components/TransitionGroupStub.md delete mode 100644 docs/ru/api/components/TransitionStub.md delete mode 100644 docs/ru/api/config.md delete mode 100644 docs/ru/api/createLocalVue.md delete mode 100644 docs/ru/api/mount.md delete mode 100644 docs/ru/api/options.md delete mode 100644 docs/ru/api/selectors.md delete mode 100644 docs/ru/api/shallow.md delete mode 100644 docs/ru/api/wrapper-array/README.md delete mode 100644 docs/ru/api/wrapper-array/at.md delete mode 100644 docs/ru/api/wrapper-array/contains.md delete mode 100644 docs/ru/api/wrapper-array/destroy.md delete mode 100644 docs/ru/api/wrapper-array/is.md delete mode 100644 docs/ru/api/wrapper-array/isEmpty.md delete mode 100644 docs/ru/api/wrapper-array/isVueInstance.md delete mode 100644 docs/ru/api/wrapper-array/setComputed.md delete mode 100644 docs/ru/api/wrapper-array/setData.md delete mode 100644 docs/ru/api/wrapper-array/setMethods.md delete mode 100644 docs/ru/api/wrapper-array/setProps.md delete mode 100644 docs/ru/api/wrapper-array/trigger.md delete mode 100644 docs/ru/api/wrapper/README.md delete mode 100644 docs/ru/api/wrapper/attributes.md delete mode 100644 docs/ru/api/wrapper/classes.md delete mode 100644 docs/ru/api/wrapper/contains.md delete mode 100644 docs/ru/api/wrapper/destroy.md delete mode 100644 docs/ru/api/wrapper/emitted.md delete mode 100644 docs/ru/api/wrapper/emittedByOrder.md delete mode 100644 docs/ru/api/wrapper/exists.md delete mode 100644 docs/ru/api/wrapper/find.md delete mode 100644 docs/ru/api/wrapper/findAll.md delete mode 100644 docs/ru/api/wrapper/html.md delete mode 100644 docs/ru/api/wrapper/is.md delete mode 100644 docs/ru/api/wrapper/isEmpty.md delete mode 100644 docs/ru/api/wrapper/isVueInstance.md delete mode 100644 docs/ru/api/wrapper/name.md delete mode 100644 docs/ru/api/wrapper/props.md delete mode 100644 docs/ru/api/wrapper/setData.md delete mode 100644 docs/ru/api/wrapper/setMethods.md delete mode 100644 docs/ru/api/wrapper/setProps.md delete mode 100644 docs/ru/api/wrapper/text.md delete mode 100644 docs/ru/api/wrapper/trigger.md delete mode 100644 docs/ru/guides/README.md delete mode 100644 docs/ru/guides/choosing-a-test-runner.md delete mode 100644 docs/ru/guides/common-tips.md delete mode 100644 docs/ru/guides/dom-events.md delete mode 100644 docs/ru/guides/getting-started.md delete mode 100644 docs/ru/guides/testing-SFCs-with-jest.md delete mode 100644 docs/ru/guides/testing-SFCs-with-mocha-webpack.md delete mode 100644 docs/ru/guides/testing-async-components.md delete mode 100644 docs/ru/guides/using-with-vue-router.md delete mode 100644 docs/ru/guides/using-with-vuex.md diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js new file mode 100644 index 000000000..f3ab678d9 --- /dev/null +++ b/docs/.vuepress/config.js @@ -0,0 +1,64 @@ +module.exports = { + locales: { + '/': { + lang: 'en-US', + title: 'Vue Test Utils', + description: 'Utilities for testing Vue components' + }, + '/ja/': { + lang: 'ja', + title: 'Vue Test Utils', + }, + '/zh/': { + lang: 'zh-CN', + title: 'Vue Test Utils', + } + }, + serviceWorker: true, + theme: 'vue', + themeConfig: { + repo: 'vuejs/vue-test-utils', + docsDir: 'docs', + locales: { + '/': { + label: 'English', + selectText: 'Languages', + editLinkText: 'Edit this page on GitHub', + nav: [ + { + text: 'API', + link: '/api/' + }, + { + text: 'Guides', + link: '/guides/' + } + ], + sidebar: [ + '/', + '/guides/', + '/api/wrapper/', + '/api/wrapper-array/', + '/api/options', + '/api/components' + ] + }, + '/zh/': { + label: '简体中文', + selectText: '选择语言', + editLinkText: '在 GitHub 上编辑此页' + }, + '/ja/': { + label: '?', + selectText: '?', + editLinkText: '?' + } + } + }, + markdown: { + config: md => { + // use more markdown-it plugins! + md.use(require('markdown-it-include')) + } + } +} \ No newline at end of file diff --git a/docs/LANGS.md b/docs/LANGS.md deleted file mode 100644 index 2860c7c8d..000000000 --- a/docs/LANGS.md +++ /dev/null @@ -1,7 +0,0 @@ -* [English](en/) -* [Français](fr/) -* [日本語](ja/) -* [简体中文](zh-cn/) -* [Portuguese (Brazil)](pt-br/) -* [Русский](ru/) -* [한국어](kr/) diff --git a/docs/en/README.md b/docs/README.md similarity index 97% rename from docs/en/README.md rename to docs/README.md index 69f82a5a5..dc9789723 100644 --- a/docs/en/README.md +++ b/docs/README.md @@ -4,8 +4,8 @@ Vue Test Utils is the official unit testing utility library for Vue.js. ## Table of Contents -* [Guides](guides/README.md) - * [Getting Started](guides/getting-started.md) +* [Guides](./guides/README.md) + * [Getting Started](./guides/getting-started.md) * [Common Tips](guides/common-tips.md) * [Mouse, Key and other DOM Events](guides/dom-events.md) * [Choosing a test runner](guides/choosing-a-test-runner.md) diff --git a/docs/en/SUMMARY.md b/docs/SUMMARY.md similarity index 100% rename from docs/en/SUMMARY.md rename to docs/SUMMARY.md diff --git a/docs/en/api/README.md b/docs/api/README.md similarity index 100% rename from docs/en/api/README.md rename to docs/api/README.md diff --git a/docs/api/components.md b/docs/api/components.md new file mode 100644 index 000000000..88fa26295 --- /dev/null +++ b/docs/api/components.md @@ -0,0 +1,87 @@ +# Components + +Vue Test Utils includes utility components you can use to stub components. + +## RouterLinkStub + +A component to stub the Vue Router `router-link` component. + +You can use this component to find a router-link component in the render tree. + +- **Usage:** + +To set it as a stub in mounting options: + +```js +import { mount, RouterLinkStub } from '@vue/test-utils' + +const wrapper = mount(Component, { + stubs: { + RouterLink: RouterLinkStub + } +}) +expect(wrapper.find(RouterLinkStub).props().to).toBe('/some/path') +``` + +## TransitionStub + +A component to stub the `transition` component. Instead of performing transitions asynchronously, it returns the child component synchronously. + +This is set to stub all `transition` components by default in the Vue Test Utils config. To use the built-in `transition` component set `config.stubs.transition` to false: + +```js +import { config } from '@vue/test-utils' + +config.stubs.transition = false +``` + +To reset it to stub `transition` components: +```js +import { config, TransitionStub } from '@vue/test-utils' + +config.stubs.transition = TransitionStub +``` + +To set it as a stub in mounting options: + +```js +import { mount, TransitionStub } from '@vue/test-utils' + +mount(Component, { + stubs: { + transition: TransitionStub + } +}) +``` + +## TransitionGroupStub + +A component to stub the `transition-group` component. Instead of performing transitions asynchronously, it returns the child components synchronously. + +This is set to stub all `transition-group` components by default in the Vue Test Utils config. To use the built-in `transition-group` component set `config.stubs['transition-group']` to false: + +```js +import { config } from '@vue/test-utils' + +config.stubs['transition-group'] = false +``` + +To reset it to stub `transition-group` components: + +```js +import { config, TransitionGroupStub } from '@vue/test-utils' + +config.stubs['transition-group'] = TransitionGroupStub +``` + +To set it as a stub in mounting options: + +```js +import { mount, TransitionGroupStub } from '@vue/test-utils' + +mount(Component, { + stubs: { + 'transition-group': TransitionGroupStub + } +}) +``` \ No newline at end of file diff --git a/docs/en/api/config.md b/docs/api/config.md similarity index 100% rename from docs/en/api/config.md rename to docs/api/config.md diff --git a/docs/en/api/createLocalVue.md b/docs/api/createLocalVue.md similarity index 100% rename from docs/en/api/createLocalVue.md rename to docs/api/createLocalVue.md diff --git a/docs/en/api/mount.md b/docs/api/mount.md similarity index 100% rename from docs/en/api/mount.md rename to docs/api/mount.md diff --git a/docs/en/api/options.md b/docs/api/options.md similarity index 95% rename from docs/en/api/options.md rename to docs/api/options.md index fd9f0a345..4191f86b5 100644 --- a/docs/en/api/options.md +++ b/docs/api/options.md @@ -2,8 +2,6 @@ Options for `mount` and `shallowMount`. The options object can contain both Vue Test Utils mounting options and other options. -## Vue Test Utils Specific Mounting Options - - [`context`](#context) - [`slots`](#slots) - [`scopedSlots`](#scopedslots) @@ -16,7 +14,7 @@ Options for `mount` and `shallowMount`. The options object can contain both Vue - [`provide`](#provide) - [`sync`](#sync) -### `context` +## context - type: `Object` @@ -38,7 +36,7 @@ const wrapper = mount(Component, { expect(wrapper.is(Component)).toBe(true) ``` -### `slots` +## slots - type: `{ [name: string]: Array|Component|string }` @@ -61,7 +59,7 @@ const wrapper = shallowMount(Component, { expect(wrapper.find('div')).toBe(true) ``` -#### Passing text +### Passing text You can pass text to `slots`. There is a limitation to this. @@ -69,7 +67,7 @@ There is a limitation to this. This does not support PhantomJS. You can use [Puppeteer](https://github.com/karma-runner/karma-chrome-launcher#headless-chromium-with-puppeteer) as an alternative. -### `scopedSlots` +## scopedSlots - type: `{ [name: string]: string }` @@ -95,7 +93,7 @@ const wrapper = shallowMount(Component, { expect(wrapper.find('#fooWrapper').html()).toBe('

0,text1

1,text2

2,text3

') ``` -### `stubs` +## stubs - type: `{ [name: string]: Component | boolean } | Array` @@ -120,7 +118,7 @@ shallowMount(Component, { }) ``` -### `mocks` +## mocks - type: `Object` @@ -138,7 +136,7 @@ const wrapper = shallowMount(Component, { expect(wrapper.vm.$route.path).toBe($route.path) ``` -### `localVue` +## localVue - type: `Vue` @@ -169,32 +167,32 @@ const wrapper = mount(Component, { expect(wrapper.vm.$route).toBeInstanceOf(Object) ``` -### `attachToDocument` +## attachToDocument - type: `boolean` - default: `false` Component will be attached to DOM when rendered if set to `true`. -### `attrs` +## attrs - type: `Object` Set the component instance's `$attrs` object. -### `listeners` +## listeners - type: `Object` Set the component instance's `$listeners` object. -### `provide` +## provide - type: `Object` Pass properties for components to use in injection. See [provide/inject](https://vuejs.org/v2/api/#provide-inject). -### `sync` +## sync - type: `boolean` - default: `true` diff --git a/docs/en/api/render.md b/docs/api/render.md similarity index 100% rename from docs/en/api/render.md rename to docs/api/render.md diff --git a/docs/en/api/renderToString.md b/docs/api/renderToString.md similarity index 100% rename from docs/en/api/renderToString.md rename to docs/api/renderToString.md diff --git a/docs/api/script.sh b/docs/api/script.sh new file mode 100755 index 000000000..2ee16a275 --- /dev/null +++ b/docs/api/script.sh @@ -0,0 +1,5 @@ +FILES=./wrapper/*-e +for f in $FILES +do + rm $f + done diff --git a/docs/en/api/selectors.md b/docs/api/selectors.md similarity index 100% rename from docs/en/api/selectors.md rename to docs/api/selectors.md diff --git a/docs/en/api/shallowMount.md b/docs/api/shallowMount.md similarity index 100% rename from docs/en/api/shallowMount.md rename to docs/api/shallowMount.md diff --git a/docs/api/wrapper-array/README.md b/docs/api/wrapper-array/README.md new file mode 100644 index 000000000..09fa44c6b --- /dev/null +++ b/docs/api/wrapper-array/README.md @@ -0,0 +1,22 @@ +# WrapperArray + +A `WrapperArray` is an object that contains an array of [`Wrappers`](../wrapper/README.md), and methods to test the `Wrappers`. + +## Properties + +`wrappers` `array`: the `Wrappers` contained in the `WrapperArray` +`length` `number`: the number of `Wrappers` contained in the `WrapperArray` + +## Methods + +!!!include(docs/api/wrapper-array/at.md)!!! +!!!include(docs/api/wrapper-array/contains.md)!!! +!!!include(docs/api/wrapper-array/destroy.md)!!! +!!!include(docs/api/wrapper-array/filter.md)!!! +!!!include(docs/api/wrapper-array/is.md)!!! +!!!include(docs/api/wrapper-array/isEmpty.md)!!! +!!!include(docs/api/wrapper-array/isVueInstance.md)!!! +!!!include(docs/api/wrapper-array/setData.md)!!! +!!!include(docs/api/wrapper-array/setMethods.md)!!! +!!!include(docs/api/wrapper-array/setProps.md)!!! +!!!include(docs/api/wrapper-array/trigger.md)!!! \ No newline at end of file diff --git a/docs/en/api/wrapper-array/at.md b/docs/api/wrapper-array/at.md similarity index 96% rename from docs/en/api/wrapper-array/at.md rename to docs/api/wrapper-array/at.md index 23b63ddf0..d8b76a3c7 100644 --- a/docs/en/api/wrapper-array/at.md +++ b/docs/api/wrapper-array/at.md @@ -1,4 +1,4 @@ -# `at(index)` +## at(index) Returns `Wrapper` at `index` passed. Uses zero based numbering (i.e. first item is at index 0). diff --git a/docs/en/api/wrapper-array/contains.md b/docs/api/wrapper-array/contains.md similarity index 95% rename from docs/en/api/wrapper-array/contains.md rename to docs/api/wrapper-array/contains.md index 6f7037546..a19ac4566 100644 --- a/docs/en/api/wrapper-array/contains.md +++ b/docs/api/wrapper-array/contains.md @@ -1,4 +1,4 @@ -# `contains(selector)` +### contains(selector) Assert every wrapper in `WrapperArray` contains selector. diff --git a/docs/en/api/wrapper-array/destroy.md b/docs/api/wrapper-array/destroy.md similarity index 95% rename from docs/en/api/wrapper-array/destroy.md rename to docs/api/wrapper-array/destroy.md index 8b817f735..2fe69172a 100644 --- a/docs/en/api/wrapper-array/destroy.md +++ b/docs/api/wrapper-array/destroy.md @@ -1,4 +1,4 @@ -# `destroy()` +## destroy() Destroys each Vue `Wrapper` in `WrapperArray`. diff --git a/docs/en/api/wrapper-array/filter.md b/docs/api/wrapper-array/filter.md similarity index 96% rename from docs/en/api/wrapper-array/filter.md rename to docs/api/wrapper-array/filter.md index f2985f060..ba8cb9004 100644 --- a/docs/en/api/wrapper-array/filter.md +++ b/docs/api/wrapper-array/filter.md @@ -1,4 +1,4 @@ -# `filter(predicate)` +## filter(predicate) Filter `WrapperArray` with a predicate function on `Wrapper` objects. diff --git a/docs/en/api/wrapper-array/is.md b/docs/api/wrapper-array/is.md similarity index 95% rename from docs/en/api/wrapper-array/is.md rename to docs/api/wrapper-array/is.md index 62ec04dfc..adc203a34 100644 --- a/docs/en/api/wrapper-array/is.md +++ b/docs/api/wrapper-array/is.md @@ -1,4 +1,4 @@ -# `is(selector)` +## is(selector) Assert every `Wrapper` in `WrapperArray` DOM node or `vm` matches [selector](../selectors.md). diff --git a/docs/en/api/wrapper-array/isEmpty.md b/docs/api/wrapper-array/isEmpty.md similarity index 95% rename from docs/en/api/wrapper-array/isEmpty.md rename to docs/api/wrapper-array/isEmpty.md index 1d7899688..1909ef070 100644 --- a/docs/en/api/wrapper-array/isEmpty.md +++ b/docs/api/wrapper-array/isEmpty.md @@ -1,4 +1,4 @@ -# `isEmpty()` +## isEmpty() Assert every `Wrapper` in `WrapperArray` does not contain child node. diff --git a/docs/en/api/wrapper-array/isVisible.md b/docs/api/wrapper-array/isVisible.md similarity index 97% rename from docs/en/api/wrapper-array/isVisible.md rename to docs/api/wrapper-array/isVisible.md index 04a01bfdf..0229eb6fb 100644 --- a/docs/en/api/wrapper-array/isVisible.md +++ b/docs/api/wrapper-array/isVisible.md @@ -1,4 +1,4 @@ -# `isVisible()` +## isVisible() Assert every `Wrapper` in `WrapperArray` is visible. diff --git a/docs/en/api/wrapper-array/isVueInstance.md b/docs/api/wrapper-array/isVueInstance.md similarity index 94% rename from docs/en/api/wrapper-array/isVueInstance.md rename to docs/api/wrapper-array/isVueInstance.md index e5cdff317..4a7eddc4f 100644 --- a/docs/en/api/wrapper-array/isVueInstance.md +++ b/docs/api/wrapper-array/isVueInstance.md @@ -1,4 +1,4 @@ -# `isVueInstance()` +## isVueInstance() Assert every `Wrapper` in `WrapperArray` is Vue instance. diff --git a/docs/en/api/wrapper-array/setData.md b/docs/api/wrapper-array/setData.md similarity index 96% rename from docs/en/api/wrapper-array/setData.md rename to docs/api/wrapper-array/setData.md index 63951ee36..be3dd2b3d 100644 --- a/docs/en/api/wrapper-array/setData.md +++ b/docs/api/wrapper-array/setData.md @@ -1,4 +1,4 @@ -# `setData(data)` +## setData(data) Sets `Wrapper` `vm` data and forces update on each `Wrapper` in `WrapperArray`. diff --git a/docs/en/api/wrapper-array/setMethods.md b/docs/api/wrapper-array/setMethods.md similarity index 95% rename from docs/en/api/wrapper-array/setMethods.md rename to docs/api/wrapper-array/setMethods.md index e74b6b5f1..eb46e75fd 100644 --- a/docs/en/api/wrapper-array/setMethods.md +++ b/docs/api/wrapper-array/setMethods.md @@ -1,4 +1,4 @@ -# `setMethods(methods)` +## setMethods(methods) Sets `Wrapper` `vm` methods and forces update on each `Wrapper` in `WrapperArray`. diff --git a/docs/en/api/wrapper-array/setProps.md b/docs/api/wrapper-array/setProps.md similarity index 95% rename from docs/en/api/wrapper-array/setProps.md rename to docs/api/wrapper-array/setProps.md index 080225cd9..391aebc5d 100644 --- a/docs/en/api/wrapper-array/setProps.md +++ b/docs/api/wrapper-array/setProps.md @@ -1,4 +1,4 @@ -# `setProps(props)` +## setProps(props) Sets `Wrapper` `vm` props and forces update on each `Wrapper` in `WrapperArray`. diff --git a/docs/en/api/wrapper-array/trigger.md b/docs/api/wrapper-array/trigger.md similarity index 93% rename from docs/en/api/wrapper-array/trigger.md rename to docs/api/wrapper-array/trigger.md index 07891b3c8..132660516 100644 --- a/docs/en/api/wrapper-array/trigger.md +++ b/docs/api/wrapper-array/trigger.md @@ -1,4 +1,4 @@ -# `trigger(eventType [, options ])` +## trigger(eventType [, options ]) Triggers an event on every `Wrapper` in the `WrapperArray` DOM node. diff --git a/docs/api/wrapper/README.md b/docs/api/wrapper/README.md new file mode 100644 index 000000000..4e1269173 --- /dev/null +++ b/docs/api/wrapper/README.md @@ -0,0 +1,50 @@ +# Wrapper + +Vue Test Utils is a wrapper based API. + +A `Wrapper` is an object that contains a mounted component or vnode and methods to test the component or vnode. + +## Properties + +### `vm` + +`Component`: This is the `Vue` instance. You can access all the [instance methods and properties of a vm](https://vuejs.org/v2/api/#Instance-Properties) with `wrapper.vm`. This only exists on Vue component wrappers + +### `element`: + +`HTMLElement`: the root DOM node of the wrapper + +### `options`: +`Object`: Object containing Vue Test Utils options passed to `mount` or `shallowMount` + +#### `options.attachedToDocument`: + +`Boolean`: True if `attachedToDocument` was passed to `mount` or `shallowMount` + +#### `options.sync` + +`Boolean`: True if `sync` was not passed as `false` to `mount` or `shallowMount` + +## Methods + +!!!include(docs/api/wrapper/attributes.md)!!! +!!!include(docs/api/wrapper/classes.md)!!! +!!!include(docs/api/wrapper/contains.md)!!! +!!!include(docs/api/wrapper/destroy.md)!!! +!!!include(docs/api/wrapper/emitted.md)!!! +!!!include(docs/api/wrapper/emittedByOrder.md)!!! +!!!include(docs/api/wrapper/exists.md)!!! +!!!include(docs/api/wrapper/find.md)!!! +!!!include(docs/api/wrapper/findAll.md)!!! +!!!include(docs/api/wrapper/html.md)!!! +!!!include(docs/api/wrapper/is.md)!!! +!!!include(docs/api/wrapper/isEmpty.md)!!! +!!!include(docs/api/wrapper/isVisible.md)!!! +!!!include(docs/api/wrapper/isVueInstance.md)!!! +!!!include(docs/api/wrapper/name.md)!!! +!!!include(docs/api/wrapper/props.md)!!! +!!!include(docs/api/wrapper/setData.md)!!! +!!!include(docs/api/wrapper/setMethods.md)!!! +!!!include(docs/api/wrapper/setProps.md)!!! +!!!include(docs/api/wrapper/text.md)!!! +!!!include(docs/api/wrapper/trigger.md)!!! diff --git a/docs/en/api/wrapper/attributes.md b/docs/api/wrapper/attributes.md similarity index 93% rename from docs/en/api/wrapper/attributes.md rename to docs/api/wrapper/attributes.md index 84841a7ab..f8613f5ff 100644 --- a/docs/en/api/wrapper/attributes.md +++ b/docs/api/wrapper/attributes.md @@ -1,4 +1,4 @@ -# `attributes()` +### attributes() Returns `Wrapper` DOM node attribute object. diff --git a/docs/en/api/wrapper/classes.md b/docs/api/wrapper/classes.md similarity index 95% rename from docs/en/api/wrapper/classes.md rename to docs/api/wrapper/classes.md index 3b1ea03b2..c37f3e192 100644 --- a/docs/en/api/wrapper/classes.md +++ b/docs/api/wrapper/classes.md @@ -1,4 +1,4 @@ -# `classes()` +## classes() Return `Wrapper` DOM node classes. diff --git a/docs/en/api/wrapper/contains.md b/docs/api/wrapper/contains.md similarity index 95% rename from docs/en/api/wrapper/contains.md rename to docs/api/wrapper/contains.md index fe1a3089f..1f96b2fab 100644 --- a/docs/en/api/wrapper/contains.md +++ b/docs/api/wrapper/contains.md @@ -1,4 +1,4 @@ -# `contains(selector)` +## contains(selector) Assert `Wrapper` contains an element or component matching [selector](../selectors.md). diff --git a/docs/en/api/wrapper/destroy.md b/docs/api/wrapper/destroy.md similarity index 94% rename from docs/en/api/wrapper/destroy.md rename to docs/api/wrapper/destroy.md index e8a4ca9a0..7e0dca260 100644 --- a/docs/en/api/wrapper/destroy.md +++ b/docs/api/wrapper/destroy.md @@ -1,4 +1,4 @@ -# `destroy()` +## destroy() Destroys a Vue component instance. diff --git a/docs/en/api/wrapper/emitted.md b/docs/api/wrapper/emitted.md similarity index 86% rename from docs/en/api/wrapper/emitted.md rename to docs/api/wrapper/emitted.md index 30593d635..0ae5b2d67 100644 --- a/docs/en/api/wrapper/emitted.md +++ b/docs/api/wrapper/emitted.md @@ -1,4 +1,4 @@ -# `emitted()` +## emitted() Return an object containing custom events emitted by the `Wrapper` `vm`. @@ -44,7 +44,7 @@ expect(wrapper.emitted('foo').length).toBe(2) expect(wrapper.emitted('foo')[1]).toEqual([123]) ``` -The `.emitted()` method returns the same object every time it is called, not a new one, and so the object will update when new events are fired: +The `.emitted() method returns the same object every time it is called, not a new one, and so the object will update when new events are fired: ```js const emitted = wrapper.emitted() diff --git a/docs/en/api/wrapper/emittedByOrder.md b/docs/api/wrapper/emittedByOrder.md similarity index 96% rename from docs/en/api/wrapper/emittedByOrder.md rename to docs/api/wrapper/emittedByOrder.md index 4e3cf4f6d..0849d7df7 100644 --- a/docs/en/api/wrapper/emittedByOrder.md +++ b/docs/api/wrapper/emittedByOrder.md @@ -1,4 +1,4 @@ -# `emittedByOrder()` +## emittedByOrder() Return an Array containing custom events emitted by the `Wrapper` `vm`. diff --git a/docs/en/api/wrapper/exists.md b/docs/api/wrapper/exists.md similarity index 97% rename from docs/en/api/wrapper/exists.md rename to docs/api/wrapper/exists.md index df58cbd8f..891d60ceb 100644 --- a/docs/en/api/wrapper/exists.md +++ b/docs/api/wrapper/exists.md @@ -1,4 +1,4 @@ -# `exists()` +## exists() Assert `Wrapper` or `WrapperArray` exists. diff --git a/docs/en/api/wrapper/find.md b/docs/api/wrapper/find.md similarity index 97% rename from docs/en/api/wrapper/find.md rename to docs/api/wrapper/find.md index b606ea4d7..37ba2a1fe 100644 --- a/docs/en/api/wrapper/find.md +++ b/docs/api/wrapper/find.md @@ -1,4 +1,4 @@ -# `find(selector)` +## find(selector) Returns [`Wrapper`](README.md) of first DOM node or Vue component matching selector. diff --git a/docs/en/api/wrapper/findAll.md b/docs/api/wrapper/findAll.md similarity index 95% rename from docs/en/api/wrapper/findAll.md rename to docs/api/wrapper/findAll.md index 321fad5ee..7c320c1c0 100644 --- a/docs/en/api/wrapper/findAll.md +++ b/docs/api/wrapper/findAll.md @@ -1,4 +1,4 @@ -# `findAll(selector)` +## findAll(selector) Returns a [`WrapperArray`](../wrapper-array/README.md). diff --git a/docs/en/api/wrapper/html.md b/docs/api/wrapper/html.md similarity index 95% rename from docs/en/api/wrapper/html.md rename to docs/api/wrapper/html.md index 92aadb5a3..439fc4e39 100644 --- a/docs/en/api/wrapper/html.md +++ b/docs/api/wrapper/html.md @@ -1,4 +1,4 @@ -# `html()` +## html() Returns HTML of `Wrapper` DOM node as a string. diff --git a/docs/en/api/wrapper/is.md b/docs/api/wrapper/is.md similarity index 94% rename from docs/en/api/wrapper/is.md rename to docs/api/wrapper/is.md index b7a582d9a..aa689a21f 100644 --- a/docs/en/api/wrapper/is.md +++ b/docs/api/wrapper/is.md @@ -1,4 +1,4 @@ -# `is(selector)` +## is(selector) Assert `Wrapper` DOM node or `vm` matches [selector](../selectors.md). diff --git a/docs/en/api/wrapper/isEmpty.md b/docs/api/wrapper/isEmpty.md similarity index 94% rename from docs/en/api/wrapper/isEmpty.md rename to docs/api/wrapper/isEmpty.md index ac7c12ed0..f24a543c2 100644 --- a/docs/en/api/wrapper/isEmpty.md +++ b/docs/api/wrapper/isEmpty.md @@ -1,4 +1,4 @@ -# `isEmpty()` +## isEmpty() Assert `Wrapper` does not contain child node. diff --git a/docs/en/api/wrapper/isVisible.md b/docs/api/wrapper/isVisible.md similarity index 96% rename from docs/en/api/wrapper/isVisible.md rename to docs/api/wrapper/isVisible.md index da66bb5e8..80e3ec091 100644 --- a/docs/en/api/wrapper/isVisible.md +++ b/docs/api/wrapper/isVisible.md @@ -1,4 +1,4 @@ -# `isVisible()` +## isVisible() Assert `Wrapper` is visible. diff --git a/docs/en/api/wrapper/isVueInstance.md b/docs/api/wrapper/isVueInstance.md similarity index 92% rename from docs/en/api/wrapper/isVueInstance.md rename to docs/api/wrapper/isVueInstance.md index 5cfcf6afb..0f0329c22 100644 --- a/docs/en/api/wrapper/isVueInstance.md +++ b/docs/api/wrapper/isVueInstance.md @@ -1,4 +1,4 @@ -# `isVueInstance()` +## isVueInstance() Assert `Wrapper` is Vue instance. diff --git a/docs/en/api/wrapper/name.md b/docs/api/wrapper/name.md similarity index 97% rename from docs/en/api/wrapper/name.md rename to docs/api/wrapper/name.md index ad93ecf5c..4bdb1ab11 100644 --- a/docs/en/api/wrapper/name.md +++ b/docs/api/wrapper/name.md @@ -1,4 +1,4 @@ -# `name()` +## name() Returns component name if `Wrapper` contains a Vue instance, or the tag name of `Wrapper` DOM node if `Wrapper` does not contain a Vue instance. diff --git a/docs/en/api/wrapper/props.md b/docs/api/wrapper/props.md similarity index 96% rename from docs/en/api/wrapper/props.md rename to docs/api/wrapper/props.md index a4989b62c..eee2d8219 100644 --- a/docs/en/api/wrapper/props.md +++ b/docs/api/wrapper/props.md @@ -1,4 +1,4 @@ -# `props()` +## props() Return `Wrapper` `vm` props object. diff --git a/docs/en/api/wrapper/setData.md b/docs/api/wrapper/setData.md similarity index 94% rename from docs/en/api/wrapper/setData.md rename to docs/api/wrapper/setData.md index 2c87ba646..817050b00 100644 --- a/docs/en/api/wrapper/setData.md +++ b/docs/api/wrapper/setData.md @@ -1,4 +1,4 @@ -# `setData(data)` +## setData(data) Sets `Wrapper` `vm` data and forces update. diff --git a/docs/en/api/wrapper/setMethods.md b/docs/api/wrapper/setMethods.md similarity index 95% rename from docs/en/api/wrapper/setMethods.md rename to docs/api/wrapper/setMethods.md index 20b682185..cdc04713b 100644 --- a/docs/en/api/wrapper/setMethods.md +++ b/docs/api/wrapper/setMethods.md @@ -1,4 +1,4 @@ -# `setMethods(methods)` +## setMethods(methods) Sets `Wrapper` `vm` methods and forces update. diff --git a/docs/en/api/wrapper/setProps.md b/docs/api/wrapper/setProps.md similarity index 97% rename from docs/en/api/wrapper/setProps.md rename to docs/api/wrapper/setProps.md index 9b601e696..60a39e472 100644 --- a/docs/en/api/wrapper/setProps.md +++ b/docs/api/wrapper/setProps.md @@ -1,4 +1,4 @@ -# `setProps(props)` +## setProps(props) - **Arguments:** - `{Object} props` diff --git a/docs/en/api/wrapper/text.md b/docs/api/wrapper/text.md similarity index 95% rename from docs/en/api/wrapper/text.md rename to docs/api/wrapper/text.md index e8ba037db..e2f764a1f 100644 --- a/docs/en/api/wrapper/text.md +++ b/docs/api/wrapper/text.md @@ -1,4 +1,4 @@ -# `text()` +## text() Returns text content of `Wrapper`. diff --git a/docs/en/api/wrapper/trigger.md b/docs/api/wrapper/trigger.md similarity index 96% rename from docs/en/api/wrapper/trigger.md rename to docs/api/wrapper/trigger.md index 1b16418ca..df675564d 100644 --- a/docs/en/api/wrapper/trigger.md +++ b/docs/api/wrapper/trigger.md @@ -1,4 +1,4 @@ -# `trigger(eventType [, options ])` +## trigger(eventType [, options ]) Triggers an event on the `Wrapper` DOM node. diff --git a/docs/book.json b/docs/book.json deleted file mode 100644 index d77d9b969..000000000 --- a/docs/book.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "title": "vue-test-utils", - "gitbook": ">3.0.0", - "plugins": ["edit-link", "theme-vuejs", "-fontsettings", "github"], - "pluginsConfig": { - "edit-link": { - "base": "https://github.com/vuejs/vue-test-utils/edit/master/docs", - "label": "Edit This Page" - }, - "github": { - "url": "https://github.com/vuejs/vue-test-utils/" - } - }, - "links": { - "sharing": { - "facebook": false, - "twitter": false - } - } -} diff --git a/docs/en/api/components/README.md b/docs/en/api/components/README.md deleted file mode 100644 index 4ef434ef2..000000000 --- a/docs/en/api/components/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Components - -Vue Test Utils includes utility components you can use to stub components. - -[TransitionStub](./TransitionStub.md) and [TransitionGroupStub](./TransitionGroupStub.md) are used to stub `transition` and `transition-group` components by default. You can edit the stubs by editing the config. diff --git a/docs/en/api/components/RouterLinkStub.md b/docs/en/api/components/RouterLinkStub.md deleted file mode 100644 index ac5e8ab06..000000000 --- a/docs/en/api/components/RouterLinkStub.md +++ /dev/null @@ -1,20 +0,0 @@ -# `RouterLinkStub` - -A component to stub the Vue Router `router-link` component. - -You can use this component to find a router-link component in the render tree. - -- **Usage:** - -To set it as a stub in mounting options: - -```js -import { mount, RouterLinkStub } from '@vue/test-utils' - -const wrapper = mount(Component, { - stubs: { - RouterLink: RouterLinkStub - } -}) -expect(wrapper.find(RouterLinkStub).props().to).toBe('/some/path') -``` diff --git a/docs/en/api/components/TransitionGroupStub.md b/docs/en/api/components/TransitionGroupStub.md deleted file mode 100644 index 95e1f0c4b..000000000 --- a/docs/en/api/components/TransitionGroupStub.md +++ /dev/null @@ -1,31 +0,0 @@ -# `TransitionGroupStub` - -A component to stub the `transition-group` component. Instead of performing transitions asynchronously, it returns the child components synchronously. - -This is set to stub all `transition-group` components by default in the Vue Test Utils config. To use the built-in `transition-group` component set `config.stubs['transition-group']` to false: - -```js -import { config } from '@vue/test-utils' - -config.stubs['transition-group'] = false -``` - -To reset it to stub `transition-group` components: - -```js -import { config, TransitionGroupStub } from '@vue/test-utils' - -config.stubs['transition-group'] = TransitionGroupStub -``` - -To set it as a stub in mounting options: - -```js -import { mount, TransitionGroupStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - 'transition-group': TransitionGroupStub - } -}) -``` diff --git a/docs/en/api/components/TransitionStub.md b/docs/en/api/components/TransitionStub.md deleted file mode 100644 index 9370ce65e..000000000 --- a/docs/en/api/components/TransitionStub.md +++ /dev/null @@ -1,30 +0,0 @@ -# `TransitionStub` - -A component to stub the `transition` component. Instead of performing transitions asynchronously, it returns the child component synchronously. - -This is set to stub all `transition` components by default in the Vue Test Utils config. To use the built-in `transition` component set `config.stubs.transition` to false: - -```js -import { config } from '@vue/test-utils' - -config.stubs.transition = false -``` - -To reset it to stub `transition` components: -```js -import { config, TransitionStub } from '@vue/test-utils' - -config.stubs.transition = TransitionStub -``` - -To set it as a stub in mounting options: - -```js -import { mount, TransitionStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - transition: TransitionStub - } -}) -``` diff --git a/docs/en/api/wrapper-array/README.md b/docs/en/api/wrapper-array/README.md deleted file mode 100644 index 40987d29b..000000000 --- a/docs/en/api/wrapper-array/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# `WrapperArray` - -A `WrapperArray` is an object that contains an array of [`Wrappers`](../wrapper/README.md), and methods to test the `Wrappers`. - -- **Properties:** - -`wrappers` `array`: the `Wrappers` contained in the `WrapperArray` -`length` `number`: the number of `Wrappers` contained in the `WrapperArray` - - - **Methods:** - -There is a detailed list of methods in the `WrapperArray` section of the docs. diff --git a/docs/en/api/wrapper/README.md b/docs/en/api/wrapper/README.md deleted file mode 100644 index 846c4729d..000000000 --- a/docs/en/api/wrapper/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# `Wrapper` - -Vue Test Utils is a wrapper based API. - -A `Wrapper` is an object that contains a mounted component or vnode and methods to test the component or vnode. - -- **Properties:** - -`vm` `Component`: this is the `Vue` instance. You can access all the [instance methods and properties of a vm](https://vuejs.org/v2/api/#Instance-Properties) with `wrapper.vm`. This only exists on Vue component wrappers -`element` `HTMLElement`: the root DOM node of the wrapper -`options` `Object`: Object containing Vue Test Utils options passed to `mount` or `shallowMount` -`options.attachedToDocument` `Boolean`: True if `attachedToDocument` was passed to `mount` or `shallowMount` -`options.sync` `Boolean`: True if `sync` was not passed as `false` to `mount` or `shallowMount` - -- **Methods:** - -There is a detailed list of methods in the wrapper section of the docs. diff --git a/docs/en/guides/README.md b/docs/en/guides/README.md deleted file mode 100644 index a6c9037f5..000000000 --- a/docs/en/guides/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Guides - -* [Getting Started](./getting-started.md) -* [Common Tips](./common-tips.md) -* [Mouse, Key and other DOM Events](./dom-events.md) -* [Choosing a test runner](./choosing-a-test-runner.md) -* [Testing SFCs with Jest](./testing-SFCs-with-jest.md) -* [Testing SFCs with Mocha + webpack](./testing-SFCs-with-mocha-webpack.md) -* [Testing SFCs with Karma](./testing-SFCs-with-karma.md) -* [Testing Asynchronous Behavior](testing-async-components.md) -* [Using with Vue Router](./using-with-vue-router.md) -* [Using with Vuex](./using-with-vuex.md) diff --git a/docs/fr/README.md b/docs/fr/README.md deleted file mode 100644 index 0c80dc1d2..000000000 --- a/docs/fr/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# vue-test-utils - -`vue-test-utils` est la bibliothèque officielle de tests unitaires pour Vue.js. - -## Table of Contents - -* [Guides](guides/README.md) - * [Commencer](guides/getting-started.md) - * [Astuces](guides/common-tips.md) - * [La souris, le clavier et les autres évènements DOM](guides/dom-events.md) - * [Choisir un lanceur de tests](guides/choosing-a-test-runner.md) - * [Tester des composants monofichiers avec Jest](guides/testing-SFCs-with-jest.md) - * [Tester des composants monofichiers avec Mocha et webpack](guides/testing-SFCs-with-mocha-webpack.md) - * [Utiliser avec Vue Router](guides/using-with-vue-router.md) - * [Utiliser avec Vuex](guides/using-with-vuex.md) -* [API](api/README.md) - * [mount](api/mount.md) - * [shallow](api/shallow.md) - * [Options de montage](api/options.md) - - [context](api/options.md#context) - - [slots](api/options.md#slots) - - [stubs](api/options.md#stubs) - - [mocks](api/options.md#mocks) - - [localVue](api/options.md#localvue) - - [attachToDocument](api/options.md#attachtodocument) - - [attrs](api/options.md#attrs) - - [listeners](api/options.md#listeners) - * [Wrapper](api/wrapper/README.md) - * [contains](api/wrapper/contains.md) - * [emitted](api/wrapper/emitted.md) - * [emittedByOrder](api/wrapper/emittedByOrder.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper/destroy.md) - * [find](api/wrapper/find.md) - * [findAll](api/wrapper/findAll.md) - * [hasAttribute](api/wrapper/hasAttribute.md) - * [hasClass](api/wrapper/hasClass.md) - * [hasProp](api/wrapper/hasProp.md) - * [html](api/wrapper/html.md) - * [is](api/wrapper/is.md) - * [isEmpty](api/wrapper/isEmpty.md) - * [isVueInstance](api/wrapper/isVueInstance.md) - * [name](api/wrapper/name.md) - * [setComputed](api/wrapper/setComputed.md) - * [setData](api/wrapper/setData.md) - * [setMethods](api/wrapper/setMethods.md) - * [setProps](api/wrapper/setProps.md) - * [text](api/wrapper/text.md) - * [trigger](api/wrapper/trigger.md) - * [WrapperArray](api/wrapper-array/README.md) - * [at](api/wrapper-array/at.md) - * [contains](api/wrapper-array/contains.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper-array/destroy.md) - * [hasAttribute](api/wrapper-array/hasAttribute.md) - * [hasClass](api/wrapper-array/hasClass.md) - * [hasProp](api/wrapper-array/hasProp.md) - * [is](api/wrapper-array/is.md) - * [isEmpty](api/wrapper-array/isEmpty.md) - * [isVueInstance](api/wrapper-array/isVueInstance.md) - * [setComputed](api/wrapper-array/setComputed.md) - * [setData](api/wrapper-array/setData.md) - * [setMethods](api/wrapper-array/setMethods.md) - * [setProps](api/wrapper-array/setProps.md) - * [trigger](api/wrapper-array/trigger.md) - * [components](api/components/README.md) - * [TransitionStub](api/components/TransitionStub.md) - * [TransitionGroupStub](api/components/TransitionGroupStub.md) - * [Selecteurs](api/selectors.md) - * [createLocalVue](api/createLocalVue.md) - * [config](api/config.md) diff --git a/docs/fr/SUMMARY.md b/docs/fr/SUMMARY.md deleted file mode 100644 index 5a509ccba..000000000 --- a/docs/fr/SUMMARY.md +++ /dev/null @@ -1,67 +0,0 @@ -## Table des matières - -* [Guides](guides/README.md) - * [Commencer](guides/getting-started.md) - * [Astuces](guides/common-tips.md) - * [La souris, le clavier et les autres évènements DOM](./dom-events.md) - * [Choisir un lanceur de tests](guides/choosing-a-test-runner.md) - * [Tester des composants monofichiers avec Jest](guides/testing-SFCs-with-jest.md) - * [Tester des composants monofichiers avec Mocha et webpack](guides/testing-SFCs-with-mocha-webpack.md) - * [Utiliser avec Vue Router](guides/using-with-vue-router.md) - * [Utiliser avec Vuex](guides/using-with-vuex.md) -* [API](api/README.md) - * [mount](api/mount.md) - * [shallow](api/shallow.md) - * [Options de montage](api/options.md) - - [context](api/options.md#context) - - [slots](api/options.md#slots) - - [stubs](api/options.md#stubs) - - [mocks](api/options.md#mocks) - - [localVue](api/options.md#localvue) - - [attachToDocument](api/options.md#attachtodocument) - - [attrs](api/options.md#attrs) - - [listeners](api/options.md#listeners) - * [Wrapper](api/wrapper/README.md) - * [contains](api/wrapper/contains.md) - * [emitted](api/wrapper/emitted.md) - * [emittedByOrder](api/wrapper/emittedByOrder.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper/destroy.md) - * [find](api/wrapper/find.md) - * [findAll](api/wrapper/findAll.md) - * [hasAttribute](api/wrapper/hasAttribute.md) - * [hasClass](api/wrapper/hasClass.md) - * [hasProp](api/wrapper/hasProp.md) - * [html](api/wrapper/html.md) - * [is](api/wrapper/is.md) - * [isEmpty](api/wrapper/isEmpty.md) - * [isVueInstance](api/wrapper/isVueInstance.md) - * [name](api/wrapper/name.md) - * [setData](api/wrapper/setData.md) - * [setMethods](api/wrapper/setMethods.md) - * [setProps](api/wrapper/setProps.md) - * [text](api/wrapper/text.md) - * [trigger](api/wrapper/trigger.md) - * [WrapperArray](api/wrapper-array/README.md) - * [at](api/wrapper-array/at.md) - * [contains](api/wrapper-array/contains.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper-array/destroy.md) - * [hasAttribute](api/wrapper-array/hasAttribute.md) - * [hasClass](api/wrapper-array/hasClass.md) - * [hasProp](api/wrapper-array/hasProp.md) - * [is](api/wrapper-array/is.md) - * [isEmpty](api/wrapper-array/isEmpty.md) - * [isVueInstance](api/wrapper-array/isVueInstance.md) - * [setComputed](api/wrapper-array/setComputed.md) - * [setData](api/wrapper-array/setData.md) - * [setMethods](api/wrapper-array/setMethods.md) - * [setProps](api/wrapper-array/setProps.md) - * [trigger](api/wrapper-array/trigger.md) - * [update](api/wrapper-array/update.md) - * [components](api/components/README.md) - * [TransitionStub](api/components/TransitionStub.md) - * [TransitionGroupStub](api/components/TransitionGroupStub.md) - * [Selectors](api/selectors.md) - * [createLocalVue](api/createLocalVue.md) - * [config](api/config.md) diff --git a/docs/fr/api/README.md b/docs/fr/api/README.md deleted file mode 100644 index 23d088aa8..000000000 --- a/docs/fr/api/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# API - -* [mount (EN)](./mount.md) -* [shallow (EN)](./shallow.md) -* [Mounting Options (EN)](./options.md) - - [context (EN)](./options.md#context) - - [slots (EN)](./options.md#slots) - - [stubs (EN)](./options.md#stubs) - - [mocks (EN)](./options.md#mocks) - - [localVue (EN)](./options.md#localvue) - - [attachToDocument (EN)](./options.md#attachtodocument) - - [attrs (EN)](./options.md#attrs) - - [listeners (EN)](./options.md#listeners) -* [Wrapper (EN)](./wrapper/README.md) - * [contains (EN)](./wrapper/contains.md) - * [emitted (EN)](./wrapper/emitted.md) - * [emittedByOrder (EN)](./wrapper/emittedByOrder.md) - * [exists (EN)](./wrapper/exists.md) - * [destroy (EN)](./wrapper/destroy.md) - * [find (EN)](./wrapper/find.md) - * [findAll (EN)](./wrapper/findAll.md) - * [hasAttribute (EN)](./wrapper/hasAttribute.md) - * [hasClass (EN)](./wrapper/hasClass.md) - * [hasProp (EN)](./wrapper/hasProp.md) - * [html (EN)](./wrapper/html.md) - * [is (EN)](./wrapper/is.md) - * [isEmpty (EN)](./wrapper/isEmpty.md) - * [isVueInstance (EN)](./wrapper/isVueInstance.md) - * [name (EN)](./wrapper/name.md) - * [setComputed (EN)](./wrapper/setComputed.md) - * [setData (EN)](./wrapper/setData.md) - * [setMethods (EN)](./wrapper/setMethods.md) - * [setProps (EN)](./wrapper/setProps.md) - * [text (EN)](./wrapper/text.md) - * [trigger (EN)](./wrapper/trigger.md) -* [WrapperArray (EN)](./wrapper-array/README.md) - * [at (EN)](./wrapper-array/at.md) - * [contains (EN)](./wrapper-array/contains.md) - * [exists (EN)](./wrapper/exists.md) - * [destroy (EN)](./wrapper-array/destroy.md) - * [hasAttribute (EN)](./wrapper-array/hasAttribute.md) - * [hasClass (EN)](./wrapper-array/hasClass.md) - * [hasProp (EN)](./wrapper-array/hasProp.md) - * [is (EN)](./wrapper-array/is.md) - * [isEmpty (EN)](./wrapper-array/isEmpty.md) - * [isVueInstance (EN)](./wrapper-array/isVueInstance.md) - * [setComputed (EN)](./wrapper-array/setComputed.md) - * [setData (EN)](./wrapper-array/setData.md) - * [setMethods (EN)](./wrapper-array/setMethods.md) - * [setProps (EN)](./wrapper-array/setProps.md) - * [trigger (EN)](./wrapper-array/trigger.md) -* [components (EN)](./components/README.md) - * [TransitionStub (EN)](./components/TransitionStub.md) - * [TransitionGroupStub (EN)](./components/TransitionGroupStub.md) -* [Selectors (EN)](./selectors.md) -* [createLocalVue (EN)](./createLocalVue.md) -* [config (EN)](./config.md) diff --git a/docs/fr/api/components/README.md b/docs/fr/api/components/README.md deleted file mode 100644 index 07ef12329..000000000 --- a/docs/fr/api/components/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Components - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

vue-test-utils includes utility components you can use to stub components.

- -[TransitionStub](./TransitionStub.md) and [TransitionGroupStub](./TransitionGroupStub.md) are used to stub `transition` and `transition-group` components by default. You can edit the stubs by editing the config. diff --git a/docs/fr/api/components/TransitionGroupStub.md b/docs/fr/api/components/TransitionGroupStub.md deleted file mode 100644 index d82ef8e88..000000000 --- a/docs/fr/api/components/TransitionGroupStub.md +++ /dev/null @@ -1,31 +0,0 @@ -# TransitionGroupStub - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

A component to stub the `transition-group` component. Instead of performing transitions asynchronously, it returns the child components synchronously.

- -This is set to stub all `transition-group` components by default in the `vue-test-utils` config. To use the built-in `transition-group` component set `config.stubs['transition-group']` to false: - -```js -import VueTestUtils from '@vue/test-utils' - -VueTestUtils.config.stubs['transition-group'] = false -``` - -To reset it to stub `transition-group` components: - -```js -import VueTestUtils, { TransitionGroupStub } from '@vue/test-utils' - -VueTestUtils.config.stubs['transition-group'] = TransitionGroupStub -``` - -To set it as a stub in mounting options: - -```js -import { mount, TransitionGroupStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - 'transition-group': TransitionGroupStub - } -}) -``` diff --git a/docs/fr/api/components/TransitionStub.md b/docs/fr/api/components/TransitionStub.md deleted file mode 100644 index b5f268fcc..000000000 --- a/docs/fr/api/components/TransitionStub.md +++ /dev/null @@ -1,30 +0,0 @@ -# TransitionStub - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

A component to stub the `transition` component. Instead of performing transitions asynchronously, it returns the child component synchronously.

- -This is set to stub all `transition` components by default in the vue-test-utils config. To use the built-in `transition` component set `config.stubs.transition` to false: - -```js -import VueTestUtils from '@vue/test-utils' - -VueTestUtils.config.stubs.transition = false -``` - -To reset it to stub `transition` components: -```js -import VueTestUtils, { TransitionStub } from '@vue/test-utils' - -VueTestUtils.config.stubs.transition = TransitionStub -``` - -To set it as a stub in mounting options: - -```js -import { mount, TransitionStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - transition: TransitionStub - } -}) -``` diff --git a/docs/fr/api/config.md b/docs/fr/api/config.md deleted file mode 100644 index d79b15e99..000000000 --- a/docs/fr/api/config.md +++ /dev/null @@ -1,25 +0,0 @@ -# Config - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

vue-test-utils includes a config object to defined options used by vue-test-utils.

- -## `vue-test-utils` Config Options - -### `stubs` - -- type: `Object` -- default: `{ - transition: TransitionStub, - 'transition-group': TransitionGroupStub -}` - -Stubs to use in components. These are overwritten by `stubs` passed in the mounting options. - -When passing `stubs` as an array in the mounting options, `config.stubs` are converted to an array, and will stub components with a basic component that returns ``. - -Example: - -```js -import VueTestUtils from '@vue/test-utils' - -VueTestUtils.config.stubs['my-compomnent'] = '
' -``` diff --git a/docs/fr/api/createLocalVue.md b/docs/fr/api/createLocalVue.md deleted file mode 100644 index 1c91640ba..000000000 --- a/docs/fr/api/createLocalVue.md +++ /dev/null @@ -1,27 +0,0 @@ -# `createLocalVue()` - -- **Returns:** - - `{Component}` - -- **Usage:** - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

`createLocalVue` returns a Vue class for you to add components, mixins and install plugins without polluting the global Vue class.

- -Use it with `options.localVue`: - -```js -import { createLocalVue, shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const localVue = createLocalVue() -const wrapper = shallow(Foo, { - localVue, - mocks: { foo: true } -}) -expect(wrapper.vm.foo).toBe(true) - -const freshWrapper = shallow(Foo) -expect(freshWrapper.vm.foo).toBe(false) -``` - -- **See also:** [Common Tips](../guides/common-tips.md#applying-global-plugins-and-mixins) diff --git a/docs/fr/api/mount.md b/docs/fr/api/mount.md deleted file mode 100644 index 1aec6da7b..000000000 --- a/docs/fr/api/mount.md +++ /dev/null @@ -1,131 +0,0 @@ -# `mount(component {, options}])` - -- **Arguments:** - - - `{Component} component` - - `{Object} options` - -- **Returns:** `{Wrapper}` - -- **Options:** - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

See [options](options.md)

- -- **Usage:** - -Returns [`Wrapper`](wrapper/README.md) of first DOM node or Vue component matching selector. - -Use any valid [selector](selectors.md). - -**Without options:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**With Vue options:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - propsData: { - color: 'red' - } - }) - expect(wrapper.props().color).toBe('red') - }) -}) -``` - -**Attach to DOM:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - attachToDocument: true - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` -**Default and named slots:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import FooBar from './FooBar.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - slots: { - default: [Bar, FooBar], - fooBar: FooBar, // Will match ``. - foo: '
' - } - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**Stubbing global properties:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const $route = { path: 'http://www.example-path.com' } - const wrapper = mount(Foo, { - mocks: { - $route - } - }) - expect(wrapper.vm.$route.path).toBe($route.path) - }) -}) -``` - -**Stubbing components:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import Faz from './Faz.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - stubs: { - Bar: '
', - BarFoo: true, - FooBar: Faz - } - }) - expect(wrapper.contains('.stubbed')).toBe(true) - expect(wrapper.contains(Bar)).toBe(true) - }) -}) -``` - -- **See also:** [Wrapper](wrapper/README.md) diff --git a/docs/fr/api/options.md b/docs/fr/api/options.md deleted file mode 100644 index b6207423e..000000000 --- a/docs/fr/api/options.md +++ /dev/null @@ -1,156 +0,0 @@ -# Mounting Options - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Options for `mount` and `shallow`. The options object can contain both `vue-test-utils` mounting options and raw Vue options.

- -Vue options are passed to the component when a new instance is created. , e.g. `store`, `propsData`. For a full list, see the [Vue API docs](https://vuejs.org/v2/api/). - -## `vue-test-utils` Specific Mounting Options - -- [`context`](#context) -- [`slots`](#slots) -- [`stubs`](#stubs) -- [`mocks`](#mocks) -- [`localVue`](#localvue) -- [`attachToDocument`](#attachtodocument) -- [`attrs`](#attrs) -- [`provide`](#provide) -- [`listeners`](#listeners) - -### `context` - -- type: `Object` - -Passes context to functional component. Can only be used with functional components. - -Example: - -```js -const wrapper = mount(Component, { - context: { - props: { show: true } - } -}) - -expect(wrapper.is(Component)).toBe(true) -``` - -### `slots` - -- type: `{ [name: string]: Array|Component|string }` - -Provide an object of slot contents to the component. The key corresponds to the slot name. The value can be either a component, an array of components, or a template string. - -Example: - -```js -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = shallow(Component, { - slots: { - default: [Foo, Bar], - fooBar: Foo, // Will match ``. - foo: '
' - } -}) -expect(wrapper.find('div')).toBe(true) -``` - -### `stubs` - -- type: `{ [name: string]: Component | boolean } | Array` - -Stubs child components. Can be an Array of component names to stub, or an object. If `stubs` is an Array, every stub is ``. - -Example: - -```js -import Foo from './Foo.vue' - -mount(Component, { - stubs: ['registered-component'] -}) - -shallow(Component, { - stubs: { - // stub with a specific implementation - 'registered-component': Foo, - // create default stub - 'another-component': true - } -}) -``` - -### `mocks` - -- type: `Object` - -Add additional properties to the instance. Useful for mocking global injections. - -Example: - -```js -const $route = { path: 'http://www.example-path.com' } -const wrapper = shallow(Component, { - mocks: { - $route - } -}) -expect(wrapper.vm.$route.path).toBe($route.path) -``` - -### `localVue` - -- type: `Vue` - -A local copy of Vue created by [`createLocalVue`](./createLocalVue.md) to use when mounting the component. Installing plugins on this copy of `Vue` prevents polluting the original `Vue` copy. - -Example: - -```js -import { createLocalVue, mount } from '@vue/test-utils' -import VueRouter from 'vue-router' -import Foo from './Foo.vue' - -const localVue = createLocalVue() -localVue.use(VueRouter) - -const routes = [ - { path: '/foo', component: Foo } -] - -const router = new VueRouter({ - routes -}) - -const wrapper = mount(Component, { - localVue, - router -}) -expect(wrapper.vm.$route).toBeInstanceOf(Object) -``` - -### `attachToDocument` - -- type: `boolean` -- default: `false` - -Component will be attach to DOM when rendered if set to `true`. - -### `attrs` - -- type: `Object` - -Set the component instance's `$attrs` object. - -### `listeners` - -- type: `Object` - -Set the component instance's `$listeners` object. - -### `provide` - -- type: `Object` - -Pass properties for components to use in injection. See [provide/inject](https://vuejs.org/v2/api/#provide-inject). diff --git a/docs/fr/api/selectors.md b/docs/fr/api/selectors.md deleted file mode 100644 index 04bbfd20c..000000000 --- a/docs/fr/api/selectors.md +++ /dev/null @@ -1,53 +0,0 @@ -# Selectors - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

A lot of methods take a selector as an argument. A selector can either be a CSS selector, a Vue component, or a find option object.

- -## CSS Selectors - -Mount handles any valid CSS selector: - -- tag selectors (`div`, `foo`, `bar`) -- class selectors (`.foo`, `.bar`) -- attribute selectors (`[foo]`, `[foo="bar"]`) -- id selectors (`#foo`, `#bar`) -- pseudo selectors (`div:first-of-type`) - -You can also use combinators: - -- direct descendant combinator (`div > #bar > .foo`) -- general descendant combinator (`div #bar .foo`) -- adjacent sibling selector (`div + .foo`) -- general sibling selector (`div ~ .foo`) - -## Vue Components - -Vue components are also valid selectors. - -`vue-test-utils` uses the `name` property to search the instance tree for matching Vue components. - -```js -// Foo.vue - -export default { - name: 'FooComponent' -} -``` - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = shallow(Foo) -expect(wrapper.is(Foo)).toBe(true) -``` - -## Find Option Object - -### Ref - -Using a find option object, `vue-test-utils` allows for selecting elements by `$ref` on wrapper components. - -```js -const buttonWrapper = wrapper.find({ ref: 'myButton' }) -buttonWrapper.trigger('click') -``` diff --git a/docs/fr/api/shallow.md b/docs/fr/api/shallow.md deleted file mode 100644 index d785eea13..000000000 --- a/docs/fr/api/shallow.md +++ /dev/null @@ -1,118 +0,0 @@ -# `shallow(component {, options}])` - -- **Arguments:** - - - `{Component} component` - - `{Object} options` - - `{boolean} attachToDocument` - - `{Object} context` - - `{Object} slots` - - `{Array|Component|String} default` - - `{Array|Component|String} named` - - `{Object} mocks` - - `{Object|Array} stubs` - - `{Object} children` - - `{Vue} localVue` - -- **Returns:** `{Wrapper}` - -- **Options:** - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

See [options](./options.md)

- -- **Usage:** - -Returns [`Wrapper`](./wrapper/README.md) of first DOM node or Vue component matching selector. - -Stubs all child components. - -Use any valid [selector](./selectors.md). - -**Without options:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**With Vue options:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo, { - propsData: { - color: 'red' - } - }) - expect(wrapper.props().color).toBe('red') - }) -}) -``` - -**Attach to DOM:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo, { - attachToDocument: true - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**Default and named slots:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import FooBar from './FooBar.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo, { - slots: { - default: [Bar, FooBar], - fooBar: FooBar, // Will match , - foo: '
' - } - }) - expect(wrapper.find('div')).toBe(true) - }) -}) -``` - -**Stubbing global properties:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const $route = { path: 'http://www.example-path.com' } - const wrapper = shallow(Foo, { - mocks: { - $route - } - }) - expect(wrapper.vm.$route.path).toBe($route.path) - }) -}) -``` diff --git a/docs/fr/api/wrapper-array/README.md b/docs/fr/api/wrapper-array/README.md deleted file mode 100644 index 40bf4af46..000000000 --- a/docs/fr/api/wrapper-array/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# WrapperArray - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

A `WrapperArray` is an object that contains an array of [`Wrappers`](../wrapper/README.md), and methods to test the `Wrappers`.

- -- **Properties:** - -`length` `number`: the number of `Wrappers` contained in the `WrapperArray` - - - **Methods:** - -There is a detailed list of methods in the `WrapperArray` section of the docs. diff --git a/docs/fr/api/wrapper-array/at.md b/docs/fr/api/wrapper-array/at.md deleted file mode 100644 index 0277f5df2..000000000 --- a/docs/fr/api/wrapper-array/at.md +++ /dev/null @@ -1,20 +0,0 @@ -# at(index) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Returns `Wrapper` at `index` passed. Uses zero based numbering (i.e. first item is at index 0).

- -- **Arguments:** - - `{number} index` - -- **Returns:** `{Wrapper}` - -- **Example:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = shallow(Foo) -const divArray = wrapper.findAll('div') -const secondDiv = divArray.at(1) -expect(secondDiv.is('p')).toBe(true) -``` diff --git a/docs/fr/api/wrapper-array/contains.md b/docs/fr/api/wrapper-array/contains.md deleted file mode 100644 index 7697993d7..000000000 --- a/docs/fr/api/wrapper-array/contains.md +++ /dev/null @@ -1,23 +0,0 @@ -# contains(selector) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert every wrapper in `WrapperArray` contains selector.

- -Use any valid [selector](../selectors.md). - -- **Arguments:** - - `{string|Component} selector` - -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = shallow(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.contains('p')).toBe(true) -expect(divArray.contains(Bar)).toBe(true) -``` diff --git a/docs/fr/api/wrapper-array/destroy.md b/docs/fr/api/wrapper-array/destroy.md deleted file mode 100644 index d9ac05659..000000000 --- a/docs/fr/api/wrapper-array/destroy.md +++ /dev/null @@ -1,16 +0,0 @@ -# destroy() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Destroys each Vue `Wrapper` in `WrapperArray`.

- -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.contains('p')).toBe(true) -divArray.destroy() -expect(divArray.contains('p')).toBe(false) -``` diff --git a/docs/fr/api/wrapper-array/hasAttribute.md b/docs/fr/api/wrapper-array/hasAttribute.md deleted file mode 100644 index 48d2b82bc..000000000 --- a/docs/fr/api/wrapper-array/hasAttribute.md +++ /dev/null @@ -1,20 +0,0 @@ -# hasAttribute(attribute, value) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert every `Wrapper` in `WrapperArray` DOM node has `attribute` matching `value`.

- -- **Arguments:** - - `{string} attribute` - - `{string} value` - -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.hasAttribute('id', 'foo')).toBe(true) -``` diff --git a/docs/fr/api/wrapper-array/hasClass.md b/docs/fr/api/wrapper-array/hasClass.md deleted file mode 100644 index dacd7ad2d..000000000 --- a/docs/fr/api/wrapper-array/hasClass.md +++ /dev/null @@ -1,19 +0,0 @@ -# hasClass(className) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert every `Wrapper` in `WrapperArray` DOM node has class containing `className`.

- -- **Arguments:** - - `{string} className` - -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.hasClass('bar')).toBe(true) -``` diff --git a/docs/fr/api/wrapper-array/hasProp.md b/docs/fr/api/wrapper-array/hasProp.md deleted file mode 100644 index 2be5b08d0..000000000 --- a/docs/fr/api/wrapper-array/hasProp.md +++ /dev/null @@ -1,23 +0,0 @@ -# hasProp(prop, value) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert every `Wrapper` in `WrapperArray` `vm` has `prop` matching `value`.

- -**Note the Wrapper must contain a Vue instance.** - -- **Arguments:** - - `{string} prop` - - `{any} value` - -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -expect(barArray.hasProp('bar', 10)).toBe(true) -``` diff --git a/docs/fr/api/wrapper-array/is.md b/docs/fr/api/wrapper-array/is.md deleted file mode 100644 index 3fb63603d..000000000 --- a/docs/fr/api/wrapper-array/is.md +++ /dev/null @@ -1,19 +0,0 @@ -# is(selector) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert every `Wrapper` in `WrapperArray` DOM node or `vm` matches [selector](../selectors.md).

- -- **Arguments:** - - `{string|Component} selector` - -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.find('div') -expect(divArray.is('div')).toBe(true) -``` diff --git a/docs/fr/api/wrapper-array/isEmpty.md b/docs/fr/api/wrapper-array/isEmpty.md deleted file mode 100644 index 992ae7bf6..000000000 --- a/docs/fr/api/wrapper-array/isEmpty.md +++ /dev/null @@ -1,16 +0,0 @@ -# isEmpty() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert every `Wrapper` in `WrapperArray` does not contain child node.

- -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.isEmpty()).toBe(true) -``` diff --git a/docs/fr/api/wrapper-array/isVueInstance.md b/docs/fr/api/wrapper-array/isVueInstance.md deleted file mode 100644 index 492f6b5bb..000000000 --- a/docs/fr/api/wrapper-array/isVueInstance.md +++ /dev/null @@ -1,17 +0,0 @@ -# isVueInstance() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert every `Wrapper` in `WrapperArray` is Vue instance.

- -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -expect(barArray.isVueInstance()).toBe(true) -``` diff --git a/docs/fr/api/wrapper-array/setComputed.md b/docs/fr/api/wrapper-array/setComputed.md deleted file mode 100644 index c92c5a466..000000000 --- a/docs/fr/api/wrapper-array/setComputed.md +++ /dev/null @@ -1,26 +0,0 @@ - -# setComputed(computedObjects) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Sets `Wrapper` `vm` computed and forces update on each `Wrapper` in `WrapperArray`.

- -**Note every `Wrapper` must contain a Vue instance.** -**Note every Vue instance must already have the computed properties passed to `setComputed`.** - -- **Arguments:** - - `{Object} computed properties` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) - -barArray.setComputed({ - computed1: 'new-computed1', - computed2: 'new-computed2' -}) -``` diff --git a/docs/fr/api/wrapper-array/setData.md b/docs/fr/api/wrapper-array/setData.md deleted file mode 100644 index abc7ea9b4..000000000 --- a/docs/fr/api/wrapper-array/setData.md +++ /dev/null @@ -1,21 +0,0 @@ -# setData(data) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Sets `Wrapper` `vm` data and forces update on each `Wrapper` in `WrapperArray`.

- -**Note every `Wrapper` must contain a Vue instance.** - -- **Arguments:** - - `{Object} data` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -barArray.setData({ foo: 'bar' }) -expect(barArray.at(0).vm.foo).toBe('bar') -``` diff --git a/docs/fr/api/wrapper-array/setMethods.md b/docs/fr/api/wrapper-array/setMethods.md deleted file mode 100644 index 6bea34ef7..000000000 --- a/docs/fr/api/wrapper-array/setMethods.md +++ /dev/null @@ -1,26 +0,0 @@ - -# setMethods(methods) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Sets `Wrapper` `vm` methods and forces update on each `Wrapper` in `WrapperArray`.

- -**Note every `Wrapper` must contain a Vue instance.** - -- **Arguments:** - - `{Object} methods` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -const clickMethodStub = sinon.stub() - -barArray.setMethods({ clickMethod: clickMethodStub }) -barArray.at(0).trigger('click') -expect(clickMethodStub.called).toBe(true) -``` diff --git a/docs/fr/api/wrapper-array/setProps.md b/docs/fr/api/wrapper-array/setProps.md deleted file mode 100644 index 72dcc151d..000000000 --- a/docs/fr/api/wrapper-array/setProps.md +++ /dev/null @@ -1,21 +0,0 @@ -# setProps(props) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Sets `Wrapper` `vm` props and forces update on each `Wrapper` in `WrapperArray`.

- -**Note every `Wrapper` must contain a Vue instance.** - -- **Arguments:** - - `{Object} props` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -barArray.setProps({ foo: 'bar' }) -expect(barArray.at(0).vm.foo).toBe('bar') -``` diff --git a/docs/fr/api/wrapper-array/trigger.md b/docs/fr/api/wrapper-array/trigger.md deleted file mode 100644 index 9ab18db7b..000000000 --- a/docs/fr/api/wrapper-array/trigger.md +++ /dev/null @@ -1,25 +0,0 @@ -# trigger(eventName) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Triggers an event on every `Wrapper` in the `WrapperArray` DOM node.

- -**Note every `Wrapper` must contain a Vue instance.** - -- **Arguments:** - - `{string} eventName` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' - -const clickHandler = sinon.stub() -const wrapper = mount(Foo, { - propsData: { clickHandler } -}) - -const divArray = wrapper.findAll('div') -divArray.trigger('click') -expect(clickHandler.called).toBe(true) -``` diff --git a/docs/fr/api/wrapper/README.md b/docs/fr/api/wrapper/README.md deleted file mode 100644 index a4b83bca9..000000000 --- a/docs/fr/api/wrapper/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# `Wrapper` - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

`vue-test-utils` is a wrapper based API.

- -A `Wrapper` is an object that contains a mounted component or vnode and methods to test the component or vnode. - -- **Properties:** - -`vm` `Component`: this is the `Vue` instance. You can access all the [instance methods and properties of a vm](https://vuejs.org/v2/api/#Instance-Properties) with `wrapper.vm`. This only exists on Vue component wrappers -`element` `HTMLElement`: the root DOM node of the wrapper -`options` `Object`: Object containing `vue-test-utils` options passed to `mount` or `shallow` -`options.attachedToDom` `Boolean`: True if `attachToDom` was passed to `mount` or `shallow` - -- **Methods:** - -There is a detailed list of methods in the wrapper section of the docs. diff --git a/docs/fr/api/wrapper/contains.md b/docs/fr/api/wrapper/contains.md deleted file mode 100644 index d42c3f430..000000000 --- a/docs/fr/api/wrapper/contains.md +++ /dev/null @@ -1,22 +0,0 @@ -# `contains(selector)` - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert `Wrapper` contains an element or component matching [selector](../selectors.md).

- -- **Arguments:** - - `{string|Component} selector` - -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -expect(wrapper.contains('p')).toBe(true) -expect(wrapper.contains(Bar)).toBe(true) -``` - -- **See also:** [selectors](../selectors.md) diff --git a/docs/fr/api/wrapper/destroy.md b/docs/fr/api/wrapper/destroy.md deleted file mode 100644 index 97d13296f..000000000 --- a/docs/fr/api/wrapper/destroy.md +++ /dev/null @@ -1,19 +0,0 @@ -# destroy() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Destroys a Vue component instance.

- -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' - -const spy = sinon.stub() -mount({ - render: null, - destroyed () { - spy() - } -}).destroy() -expect(spy.calledOnce).toBe(true) -``` diff --git a/docs/fr/api/wrapper/emitted.md b/docs/fr/api/wrapper/emitted.md deleted file mode 100644 index af4b517e8..000000000 --- a/docs/fr/api/wrapper/emitted.md +++ /dev/null @@ -1,45 +0,0 @@ -# emitted() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Return an object containing custom events emitted by the `Wrapper` `vm`.

- -- **Returns:** `{ [name: string]: Array> }` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' - -const wrapper = mount(Component) - -wrapper.vm.$emit('foo') -wrapper.vm.$emit('foo', 123) - -/* -wrapper.emitted() returns the following object: -{ - foo: [[], [123]] -} -*/ - -// assert event has been emitted -expect(wrapper.emitted().foo).toBeTruthy() - -// assert event count -expect(wrapper.emitted().foo.length).toBe(2) - -// assert event payload -expect(wrapper.emitted().foo[1]).toEqual([123]) -``` - -You can also write the above as follows: - -```js -// assert event has been emitted -expect(wrapper.emitted('foo')).toBeTruthy() - -// assert event count -expect(wrapper.emitted('foo').length).toBe(2) - -// assert event payload -expect(wrapper.emitted('foo')[1]).toEqual([123]) -``` diff --git a/docs/fr/api/wrapper/emittedByOrder.md b/docs/fr/api/wrapper/emittedByOrder.md deleted file mode 100644 index a11fecd12..000000000 --- a/docs/fr/api/wrapper/emittedByOrder.md +++ /dev/null @@ -1,27 +0,0 @@ -# emittedByOrder() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Return an Array containing custom events emitted by the `Wrapper` `vm`.

- -- **Returns:** `Array<{ name: string, args: Array }>` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' - -const wrapper = mount(Component) - -wrapper.vm.$emit('foo') -wrapper.vm.$emit('bar', 123) - -/* -wrapper.emittedByOrder() returns the following Array: -[ - { name: 'foo', args: [] }, - { name: 'bar', args: [123] } -] -*/ - -// assert event emit order -expect(wrapper.emittedByOrder().map(e => e.name)).toEqual(['foo', 'bar']) -``` diff --git a/docs/fr/api/wrapper/exists.md b/docs/fr/api/wrapper/exists.md deleted file mode 100644 index 84ba98132..000000000 --- a/docs/fr/api/wrapper/exists.md +++ /dev/null @@ -1,20 +0,0 @@ -# exists() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert `Wrapper` or `WrapperArray` exists.

- -Returns false if called on an empty `Wrapper` or `WrapperArray`. - -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.exists()).toBe(true) -expect(wrapper.find('does-not-exist').exists()).toBe(false) -expect(wrapper.findAll('div').exists()).toBe(true) -expect(wrapper.findAll('does-not-exist').exists()).toBe(false) -``` diff --git a/docs/fr/api/wrapper/find.md b/docs/fr/api/wrapper/find.md deleted file mode 100644 index 91b0c477a..000000000 --- a/docs/fr/api/wrapper/find.md +++ /dev/null @@ -1,26 +0,0 @@ -# find(selector) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Returns [`Wrapper`](README.md) of first DOM node or Vue component matching selector.

- -Use any valid [selector](../selectors.md). - -- **Arguments:** - - `{string|Component} selector` - -- **Returns:** `{Wrapper}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const div = wrapper.find('div') -expect(div.is('div')).toBe(true) -const bar = wrapper.find(Bar) -expect(bar.is(Bar)).toBe(true) -``` - -- **See also:** [Wrapper](README.md) diff --git a/docs/fr/api/wrapper/findAll.md b/docs/fr/api/wrapper/findAll.md deleted file mode 100644 index 003bdadc3..000000000 --- a/docs/fr/api/wrapper/findAll.md +++ /dev/null @@ -1,26 +0,0 @@ -# findAll(selector) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Returns a [`WrapperArray`](../wrapper-array/README.md) of [Wrappers](README.md).

- -Use any valid [selector](../selectors.md). - -- **Arguments:** - - `{string|Component} selector` - -- **Returns:** `{WrapperArray}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const div = wrapper.findAll('div').at(0) -expect(div.is('div')).toBe(true) -const bar = wrapper.findAll(Bar).at(0) -expect(bar.is(Bar)).toBe(true) -``` - -- **See also:** [Wrapper](README.md) diff --git a/docs/fr/api/wrapper/hasAttribute.md b/docs/fr/api/wrapper/hasAttribute.md deleted file mode 100644 index c7b8cef0a..000000000 --- a/docs/fr/api/wrapper/hasAttribute.md +++ /dev/null @@ -1,35 +0,0 @@ -# hasAttribute(attribute, value) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert `Wrapper` DOM node has attribute matching value.

- -Returns `true` if `Wrapper` DOM node contains attribute with matching value. - -- **Arguments:** - - `{string} attribute` - - `{string} value` - -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.hasAttribute('id', 'foo')).toBe(true) -``` - -- **Alternative:** - -You could get the attribute from the `Wrapper.element` to have a value based assertion: - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.element.getAttribute('id')).toBe('foo') -``` - -This makes for a more informative assertion error. diff --git a/docs/fr/api/wrapper/hasClass.md b/docs/fr/api/wrapper/hasClass.md deleted file mode 100644 index 23cacb790..000000000 --- a/docs/fr/api/wrapper/hasClass.md +++ /dev/null @@ -1,20 +0,0 @@ -# hasClass(className) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert `Wrapper` DOM node has class contains `className`.

- -Returns `true` if `Wrapper` DOM node contains the class. - -- **Arguments:** - - `{string} className` - -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.hasClass('bar')).toBe(true) -``` diff --git a/docs/fr/api/wrapper/hasProp.md b/docs/fr/api/wrapper/hasProp.md deleted file mode 100644 index db4c18b36..000000000 --- a/docs/fr/api/wrapper/hasProp.md +++ /dev/null @@ -1,24 +0,0 @@ -# hasProp(prop, value) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert `Wrapper` `vm` has `prop` matching `value`.

- -Returns `true` if `Wrapper` `vm` has `prop` matching `value`. - - -**Note: the Wrapper must contain a Vue instance.** - -- **Arguments:** - - `{string} prop` - - `{any} value` - -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.hasProp('bar', 10)).toBe(true) -``` diff --git a/docs/fr/api/wrapper/html.md b/docs/fr/api/wrapper/html.md deleted file mode 100644 index 86a71f367..000000000 --- a/docs/fr/api/wrapper/html.md +++ /dev/null @@ -1,15 +0,0 @@ -# html() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Returns HTML of `Wrapper` DOM node as a string.

- -- **Returns:** `{string}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.html()).toBe('

Foo

') -``` diff --git a/docs/fr/api/wrapper/is.md b/docs/fr/api/wrapper/is.md deleted file mode 100644 index 760e55158..000000000 --- a/docs/fr/api/wrapper/is.md +++ /dev/null @@ -1,18 +0,0 @@ -# is(selector) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert `Wrapper` DOM node or `vm` matches [selector](../selectors.md).

- -- **Arguments:** - - `{string|Component} selector` - -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.is('div')).toBe(true) -``` diff --git a/docs/fr/api/wrapper/isEmpty.md b/docs/fr/api/wrapper/isEmpty.md deleted file mode 100644 index 3ec919e23..000000000 --- a/docs/fr/api/wrapper/isEmpty.md +++ /dev/null @@ -1,15 +0,0 @@ -# isEmpty() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert `Wrapper` does not contain child node.

- -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.isEmpty()).toBe(true) -``` diff --git a/docs/fr/api/wrapper/isVueInstance.md b/docs/fr/api/wrapper/isVueInstance.md deleted file mode 100644 index 57c58063f..000000000 --- a/docs/fr/api/wrapper/isVueInstance.md +++ /dev/null @@ -1,15 +0,0 @@ -# isVueInstance() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Assert `Wrapper` is Vue instance.

- -- **Returns:** `{boolean}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.isVueInstance()).toBe(true) - ``` diff --git a/docs/fr/api/wrapper/name.md b/docs/fr/api/wrapper/name.md deleted file mode 100644 index 0b1f85fee..000000000 --- a/docs/fr/api/wrapper/name.md +++ /dev/null @@ -1,17 +0,0 @@ -# name() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Returns component name if `Wrapper` contains a Vue instance, or the tag name of `Wrapper` DOM node if `Wrapper` does not contain a Vue instance.

- -- **Returns:** `{string}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.name()).toBe('Foo') -const p = wrapper.find('p') -expect(p.name()).toBe('p') -``` diff --git a/docs/fr/api/wrapper/setData.md b/docs/fr/api/wrapper/setData.md deleted file mode 100644 index 9673e4dfd..000000000 --- a/docs/fr/api/wrapper/setData.md +++ /dev/null @@ -1,19 +0,0 @@ -# setData(data) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Sets `Wrapper` `vm` data and forces update.

- -**Note the Wrapper must contain a Vue instance.** - -- **Arguments:** - - `{Object} data` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -wrapper.setData({ foo: 'bar' }) -expect(wrapper.vm.foo).toBe('bar') -``` diff --git a/docs/fr/api/wrapper/setMethods.md b/docs/fr/api/wrapper/setMethods.md deleted file mode 100644 index d36bcbf65..000000000 --- a/docs/fr/api/wrapper/setMethods.md +++ /dev/null @@ -1,23 +0,0 @@ -# setMethods(methods) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Sets `Wrapper` `vm` methods and forces update.

- -**Note the Wrapper must contain a Vue instance.** - -- **Arguments:** - - `{Object} methods` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const clickMethodStub = sinon.stub() - -wrapper.setMethods({ clickMethod: clickMethodStub }) -wrapper.find('button').trigger('click') -expect(clickMethodStub.called).toBe(true) -``` diff --git a/docs/fr/api/wrapper/setProps.md b/docs/fr/api/wrapper/setProps.md deleted file mode 100644 index 5601c65e9..000000000 --- a/docs/fr/api/wrapper/setProps.md +++ /dev/null @@ -1,46 +0,0 @@ -# setProps(props) - -- **Arguments:** - - `{Object} props` - -- **Usage:** - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Sets `Wrapper` `vm` props and forces update.

- -**Note the Wrapper must contain a Vue instance.** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -wrapper.setProps({ foo: 'bar' }) -expect(wrapper.vm.foo).toBe('bar') -``` - -You can also pass a `propsData` object, which will initialize the Vue instance with passed values. - -``` js -// Foo.vue -export default { - props: { - foo: { - type: String, - required: true - } - } -} -``` - -``` js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo, { - propsData: { - foo: 'bar' - } -}) - -expect(wrapper.vm.foo).toBe('bar') -``` diff --git a/docs/fr/api/wrapper/text.md b/docs/fr/api/wrapper/text.md deleted file mode 100644 index a2ddebe30..000000000 --- a/docs/fr/api/wrapper/text.md +++ /dev/null @@ -1,15 +0,0 @@ -# text() - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Returns text content of `Wrapper`.

- -- **Returns:** `{string}` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.text()).toBe('bar') -``` diff --git a/docs/fr/api/wrapper/trigger.md b/docs/fr/api/wrapper/trigger.md deleted file mode 100644 index 957d43359..000000000 --- a/docs/fr/api/wrapper/trigger.md +++ /dev/null @@ -1,31 +0,0 @@ -# trigger(eventName) - -

⚠Cette page est actuellement en cours de traduction française. Vous pouvez repasser plus tard ou participer à la traduction de celle-ci dès maintenant !

Triggers an event on the `Wrapper` DOM node.

- -`trigger` takes an optional `options` object. The properties in the `options` object are added to the Event. - - -- **Arguments:** - - `{string} eventName` - - `{Object} options` - -- **Example:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo' - -const clickHandler = sinon.stub() -const wrapper = mount(Foo, { - propsData: { clickHandler } -}) - -wrapper.trigger('click') - -wrapper.trigger('click', { - button: 0 -}) - -expect(clickHandler.called).toBe(true) -``` diff --git a/docs/fr/guides/README.md b/docs/fr/guides/README.md deleted file mode 100644 index 7cedb95d6..000000000 --- a/docs/fr/guides/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Guides - -* [Commencer](./getting-started.md) -* [Astuces](./common-tips.md) -* [La souris, le clavier et les autres évènements DOM](./dom-events.md) -* [Choisir un lanceur de tests](./choosing-a-test-runner.md) -* [Tester des composants monofichiers avec Jest](./testing-SFCs-with-jest.md) -* [Tester des composants monofichiers avec Mocha et webpack](./testing-SFCs-with-mocha-webpack.md) -* [Utiliser avec Vue Router](./using-with-vue-router.md) -* [Utiliser avec Vuex](./using-with-vuex.md) diff --git a/docs/fr/guides/choosing-a-test-runner.md b/docs/fr/guides/choosing-a-test-runner.md deleted file mode 100644 index c70bdad4e..000000000 --- a/docs/fr/guides/choosing-a-test-runner.md +++ /dev/null @@ -1,45 +0,0 @@ -# Choisir un lanceur de tests - -Un lanceur de tests est un programme qui lance des tests (et oui !). - -Il y a un nombre conséquent de lanceurs de tests JavaScript et `vue-test-utils` fonctionne avec tous. `vue-test-utils` est agnostique en terme de lanceurs de tests. - -Il y a tout de même plusieurs choses à considérer afin de choisir un lanceur de tests : variété des fonctionnalités, performance et support de la précompilation des composants monofichiers. Après avoir soigneusement analysé et comparé les bibliothèques, il y a deux lanceurs de tests que nous recommandons : - -- [Jest](https://facebook.github.io/jest/docs/en/getting-started.html#content) est le lanceur de test le plus complet en termes de fonctionnalités. Il requiert une configuration minimale, installe JSDOM par défaut, fournit des assertions prêtes à l'utilisation et a une très bonne interface en ligne de commandes. Cependant, vous allez avoir besoin d'un préprocesseur afin d'être capable d'importer les composants monofichiers dans vos tests. On a créé le préprocesseur `vue-jest` qui peut gérer les fonctionnalités communes des composants monofichiers. Il n'a cependant pas encore autant de fonctionnalités que `vue-loader`. - -- [mocha-webpack](https://github.com/zinserjan/mocha-webpack) est une surcouche de webpack + Mocha avec une expérience simplifiée et un mode de surveillance. Les bénéfices de cette installation sont que l'on peut avoir le support complet des composants monofichiers via webpack + `vue-loader`. Il y a cependant plus de configurations à réaliser. - -## Environnement du navigateur - -`vue-test-utils` se fie à un environnement de navigateur. Techniquement, vous pouvez le lancer dans un vrai navigateur, mais cela n'est pas recommandé dû à la complexité de lancer de réels navigateurs sur différentes plateformes. Au lieu de cela, nous recommandons de lancer les tests sous Node.js avec un environnement virtuel de navigateur en utilisant le [JSDOM](https://github.com/tmpvar/jsdom). - -Le lanceur de tests Jest installe automatiquement JSDOM. Pour d'autres lanceurs de tests, il faut le faire manuellement en utilisant [jsdom-global](https://github.com/rstacruz/jsdom-global) dans la déclaration de vos tests : - -``` bash -npm install --save-dev jsdom jsdom-global -``` ---- -``` js -// dans test setup / entry -require('jsdom-global')() -``` - -## Tester des composants monofichiers - -Les composants Vue monofichiers nécessitent une étape de précompilation avant qu'ils soient lancés dans Node.js ou sur un navigateur. Il existe deux méthodes recommandées pour réaliser la compilation : avec un préprocesseur Jest ou directement en utilisant webpack. - -Le préprocesseur `vue-jest` supporte les fonctionnalités basiques des composants monofichiers. Il ne gère pas actuellement les blocs de style et les blocs personnalisés, qui sont eux uniquement supportés par `vue-loader`. Si vous utilisez ces fonctionnalités ou d'autres configurations liées à webpack, vous aurez besoin d'utiliser l'installation basée sur webpack + `vue-loader` - -Lisez les guides suivants pour différentes installations : - -- [Tester des composants monofichiers avec Jest](./testing-SFCs-with-jest.md) -- [Tester des composants monofichiers avec Mocha + webpack](./testing-SFCs-with-mocha-webpack.md) - -## Ressources - -- [Comparaison de lanceurs de tests](https://github.com/eddyerburgh/vue-unit-test-perf-comparison) -- [Projet exemple avec Jest](https://github.com/vuejs/vue-test-utils-jest-example) -- [Projet exemple avec Mocha](https://github.com/vuejs/vue-test-utils-mocha-webpack-example) -- [Projet exemple avec tape](https://github.com/eddyerburgh/vue-test-utils-tape-example) -- [Projet exemple avec AVA](https://github.com/eddyerburgh/vue-test-utils-ava-example) diff --git a/docs/fr/guides/common-tips.md b/docs/fr/guides/common-tips.md deleted file mode 100644 index 9ac24bb2f..000000000 --- a/docs/fr/guides/common-tips.md +++ /dev/null @@ -1,132 +0,0 @@ -# Astuces - -## Savoir quoi tester - -Pour les composants graphiques (UI), nous ne recommandons pas une couverture complète. En effet, cela mène à trop d'attention sur les détails de l'implémentation interne des composants et pourrait produire des tests instables. - -A contrario, nous recommandons d'écrire des tests qui vérifient le bon fonctionnement de l'interface public de vos composants et ainsi traiter le cœur de ceux-ci telle une boîte noire. Un simple test pourrait vérifier qu'une entrée utilisateur (due à une interaction ou un changement de props) passée au composant nous donnerait le résultat attendu (cela peut être un nouveau rendu ou l'envoi d'un évènement). - -Par exemple, pour le composant `Counter`, qui incrémente un compteur visible de 1 à chaque fois qu'un bouton est cliqué, le scénario de test devrait simuler le clic puis s'assurer que le rendu visuel a bien été incrémenté d'un aussi. Le test se fiche de savoir comment le compteur a incrémenté la valeur, il s'occupe seulement de l'entrée et de la sortie (du résultat). - -Le bénéfice de cette approche est que tant que l'interface public de votre composant reste la même, vos tests passeront et ce peu importe le comportement interne de votre composant, qui pourrait changer avec le temps. - -Ce sujet est discuté plus en détails dans une [très bonne présentation de Matt O'Connell](http://slides.com/mattoconnell/deck#/). - -## Rendu superficiel - -Dans des tests unitaires, on souhaite s'intéresser au composant qui est en train d'être testé comme une unité isolée et ainsi éviter de s'assurer du bon comportement des composants enfants. - -De plus, pour les composants qui contiennent beaucoup de composants enfants, l'intégralité de l'arbre de rendu peut être énorme. Répétitivement rendre tous les composants pourrait réduire la vitesse de nos tests. - -`vue-test-utils` vous permets de monter un composant sans avoir à rendre ses composants enfants (en les ignorants) avec la méthode `shallow` : - -```js -import { shallow } from '@vue/test-utils' - -const wrapper = shallow(Component) // retourne un wrapper contenant une instance de composant montée -wrapper.vm // l'instance de Vue montée -``` - -## Assertion d'évènements émis - -Chaque wrapper monté va automatiquement enregistrer les évènements émis par l'instance de Vue en question. Vous pouvez récupérer ces évènements en utilisant la méthode `wrapper.emitted()` : - -``` js -wrapper.vm.$emit('foo') -wrapper.vm.$emit('foo', 123) - -/* -`wrapper.emitted()` retourne l'objet suivant : -{ - foo: [[], [123]] -} -*/ -``` - -Vous pouvez ensuite réaliser des assertions sur ces données : -``` js -// asserte que l'évènement est bien émit -expect(wrapper.emitted().foo).toBeTruthy() - -// asserte la taille du compteur d'évènement -expect(wrapper.emitted().foo.length).toBe(2) - -// asserte le contenu lié à l'évènement -expect(wrapper.emitted().foo[1]).toEqual([123]) -``` - -Vous pouvez aussi récupérer un tableau des évènements dans l'ordre d'émition en appelant [`wrapper.emittedByOrder()`](../api/wrapper/emittedByOrder.md). - -## Manipuler l'état d'un composant - -Vous pouvez directement manipuler l'état d'un composant en utilisant la méthode `setData` ou `setProps` sur le wrapper : - -```js -wrapper.setData({ count: 10 }) - -wrapper.setProps({ foo: 'bar' }) -``` - -## Simuler des props - -Vous pouvez passer des props au composant en utilisant l'option `propsData` de Vue : - -```js -import { mount } from '@vue/test-utils' - -mount(Component, { - propsData: { - aProp: 'une valeur' - } -}) -``` - -Vous pouvez aussi mettre à jour les props d'un composant déjà monté avec la méthode `wrapper.setProps({})`. - -*Pour une liste complète des options, veuillez regarder [la section sur les options de montage](../api/options.md) de la documentation.* - -## Appliquer des plugins globaux et des mixins - -Des composants pourraient se fier à des fonctionnalités injectées par un plugin global ou un mixin, par exemple `vuex` ou `vue-router`. - -Si vous écrivez des tests pour des composants dans une application spécifique, vous pouvez mettre en place les mêmes plugins globaux et mixins en une seule fois dans vos tests. Dans certains cas, comme tester un composant générique utilisé par des applications différentes, il est favorable de tester ces composants dans une installation plus isolée, sans avoir à polluer le constructeur global `Vue`. On peut utiliser la méthode [`createLocalVue`](../api/createLocalVue.md) pour faire cela : - -``` js -import { createLocalVue } from '@vue/test-utils' - -// créer un constructeur local de `Vue` -const localVue = createLocalVue() - -// installer des plugins comme d'habitude -localVue.use(MyPlugin) - -// passe la `localVue` aux options de montage -mount(Component, { - localVue -}) -``` - -## Simuler des injections - -Une stratégie alternative pour injecter des propriétés est de simplement les simuler. Vous pouvez faire cela avec l'option `mocks` : - -```js -import { mount } from '@vue/test-utils' - -const $route = { - path: '/', - hash: '', - params: { id: '123' }, - query: { q: 'bonjour' } -} - -mount(Component, { - mocks: { - $route // ajoute l'objet `$route` simulé à l'instance de Vue avant de monter le composant - } -}) -``` - -## Gérer le routage - -Depuis que le routage, par définition, porte sur la structure générale de l'application et implique plusieurs composants. Il est mieux testé via des tests d'intégration ou point à point (end-to-end). Pour des composants individuels qui se fie aux fonctionnalités de `vue-router`, vous pouvez les simuler en utilisant les techniques mentionnées plus haut. diff --git a/docs/fr/guides/dom-events.md b/docs/fr/guides/dom-events.md deleted file mode 100644 index bc2ba58b7..000000000 --- a/docs/fr/guides/dom-events.md +++ /dev/null @@ -1,195 +0,0 @@ -# Tester le clavier, la souris et les autres évènements DOM - -## Déclencheur d'évènements - - -Le `Wrapper` expose une méthode `trigger`. Elle peut être utilisée pour déclencher des évènements du DOM. - -```js -const wrapper = mount(MyButton) - -wrapper.trigger('click') -``` - -Vous devez être au courant que la méthode `find` retourne aussi un `Wrapper`. En partant du principe que `MyComponent` contient un bouton, le code suivant clique sur le bouton. - -```js -const wrapper = mount(MyComponent) - -wrapper.find('button').trigger('click') -``` - -## Options - -La méthode `trigger` prend en paramètre optionnel l'objet `options`. Les propriétés de l'objet `options` sont ajoutées à l'évènement. - -```js -const wrapper = mount(MyButton) - -wrapper.trigger('click', { button: 0 }) -``` - - -## Exemple de clic de souris - -**Composant à tester** - -```html - - - -``` - -**Test** - -```js -import YesNoComponent from '@/components/YesNoComponent' -import { mount } from '@vue/test-utils' -import sinon from 'sinon' - -describe('Évènement click', () => { - it("Cliquer sur le bouton oui appelle notre méthode avec l'argument « oui »", () => { - const spy = sinon.spy() - const wrapper = mount(YesNoComponent, { - propsData: { - callMe: spy - } - }) - wrapper.find('button.yes').trigger('click') - - spy.should.have.been.calledWith('oui') - }) -}) -``` - -## Exemple de test clavier - -**Composant à tester** - -Ce composant permet d'incrémenter / décrémenter la quantité en utilisant différentes touches. - -```html - - - -``` - -**Test** - -```js -import QuantityComponent from '@/components/QuantityComponent' -import { mount } from '@vue/test-utils' - -describe('Tests événement clavier', () => { - it('La quantité est zéro par défaut', () => { - const wrapper = mount(QuantityComponent) - expect(wrapper.vm.quantity).toBe(0) - }) - - it('La flèche du haut positionne la quantité à 1', () => { - const wrapper = mount(QuantityComponent) - wrapper.trigger('keydown.up') - expect(wrapper.vm.quantity).toBe(1) - }) - - it('La flèche du bas réduit la quantité de 1', () => { - const wrapper = mount(QuantityComponent) - wrapper.vm.quantity = 5 - wrapper.trigger('keydown.down') - expect(wrapper.vm.quantity).toBe(4) - }) - - it('La touche Échap positionne la quantité à 0', () => { - const wrapper = mount(QuantityComponent) - wrapper.vm.quantity = 5 - wrapper.trigger('keydown.esc') - expect(wrapper.vm.quantity).toBe(0) - }) - - it('Le caractère magique `a` positionne la quantité à 13', () => { - const wrapper = mount(QuantityComponent) - wrapper.trigger('keydown', { - which: 65 - }) - expect(wrapper.vm.quantity).toBe(13) - }) -}) - -``` - -**Limitations** - -Un nom de touche après le point `keydown.up` est traduit vers un `keyCode`. Cela est supporté pour les noms suivant : - -* `enter`, `tab`, `delete`, `esc`, `space`, `up`, `down`, `left`, `right` - -## Important - -`vue-test-utils` déclenche les évènements de façon synchrone. Par conséquent, `vue.nextTick` n'est pas requis. diff --git a/docs/fr/guides/getting-started.md b/docs/fr/guides/getting-started.md deleted file mode 100644 index 8bd383b5b..000000000 --- a/docs/fr/guides/getting-started.md +++ /dev/null @@ -1,144 +0,0 @@ -# Pour commencer - -## Installation - -Pour avoir un rapide avant-gout de `vue-test-utils`, clonez notre répertoire de démonstration avec l'installation de base puis installez les dépendances : - -``` bash -git clone https://github.com/vuejs/vue-test-utils-getting-started -cd vue-test-utils-getting-started -npm install -``` - -Vous allez voir que le projet possède un simple composant, `counter.js` : - -```js -// counter.js - -export default { - template: ` -
- {{ count }} - -
- `, - - data () { - return { - count: 0 - } - }, - - methods: { - increment () { - this.count++ - } - } -} -``` - -### Montages de composants - -`vue-test-utils` teste les composants Vue en les isolants puis en les montant, il simule les entrées nécessaires (props, injections et évènements utilisateur) et asserte les sorties (le rendu, les évènements émis). - -Les composants montés sont retournés dans un [Wrapper](../api/wrapper/), qui expose de nombreuses méthodes pour manipuler, traverser et interroger l'instance du composant Vue en question. - -Vous pouvez créer des wrappers en utilisant la méthode `mount`. Créons un fichier nommé `test.js` : - -```js -// test.js - -// Importe la méthode `mount()` depuis test utils -// et le composant qu'on souhaite tester -import { mount } from '@vue/test-utils' -import Counter from './counter' - -// On monte le composant et nous voilà avec un wrapper -const wrapper = mount(Counter) - -// On accède à l'instance actuelle de Vue via `wrapper.vm` -const vm = wrapper.vm - -// Pour inspecter le wrapper en profondeur, utilisez console -// puis votre aventure avec vue-test-utils commence ! -console.log(wrapper) -``` - -### Tester le contenu du rendu HTML d'un composant - -Nous avons maintenant un wrapper, la première chose que l'on peut faire, c'est de vérifier que le contenu du rendu HTML du composant correspond à celui attendu. - -```js -import { mount } from '@vue/test-utils' -import Counter from './counter' - -describe('Counter', () => { - // On monte le composant et nous voilà avec un wrapper - const wrapper = mount(Counter) - - it('fait le rendu correctement', () => { - expect(wrapper.html()).toContain('0') - }) - - // c'est aussi très simple de vérifier qu'un élément existe - it('a un bouton', () => { - expect(wrapper.contains('button')).toBe(true) - }) -}) -``` - -On peut maintenant lancer les tests avec `npm test`. Vous devriez voir les tests se lancer et réussir. - -### Simulation de l'interaction utilisateur - -Notre compteur devrait s'incrémenter quand l'utilisateur clique sur le bouton. Pour simuler ce comportement, on doit tout d'abord localiser le bouton avec `wrapper.find()`, qui retourne un **wrapper pour l'élément bouton**. On peut ensuite simuler un clic en appelant `.trigger()` sur le wrapper du bouton : - -```js -it('le clic sur le bouton devrait incrémenter le compteur', () => { - expect(wrapper.vm.count).toBe(0) - const button = wrapper.find('button') - button.trigger('click') - expect(wrapper.vm.count).toBe(1) -}) -``` - -### Et quid de `nextTick` ? - -Vue groupe les mises à jour du DOM en attentes puis les appliquent de façon asynchrone pour prévenir d'éventuels multiples rendus causés par de multiples mutations de données. C'est pourquoi en pratique, on a souvent à utiliser `Vue.nextTick` pour attendre que Vue modifie le DOM actuel après avoir lancé quelques changements d'état. - -Pour simplifier cela, `vue-test-utils` applique toutes les mises à jour de façon synchrone afin que vous n'ayez pas besoin d'utiliser `Vue.nextTick` pour attendre des mises à jour du DOM dans vos tests. - -*Note : `nextTick` est toujours nécessaire quand vous souhaitez explicitement faire avancer la boucle des évènements, pour des opérations telles que des fonctions de rappel ou des résolutions de promesses.* - -Si vous avez toujours besoin de `nextTick` dans vos fichiers de tests, faites attention aux erreurs jetées aux erreurs lancées à l'intérieur qui peuvent ne pas être attrapées par votre lanceur de tests car il utilise des promesses. Il y a deux approches pour régler celà : vous pouvez affecter la fonction de rappel `done` du système de gestion d'erreurs globales de Vue au démarrage des tests, ou vous pouvez appeler `nextTick` sans argument pour l'utiliser sous forme de promesse : - -```js -// ceci ne sera pas intercepté -it("pas d'interception", (done) => { - Vue.nextTick(() => { - expect(true).toBe(false) - done() - }) -}) - -// les deux tests ci-dessous vont fonctionner comme souhaité -it("attraper l'erreur avec `done`", (done) => { - Vue.config.errorHandler = done - Vue.nextTick(() => { - expect(true).toBe(false) - done() - }) -}) - -it("attraper l'erreur avec une promesse", () => { - return Vue.nextTick() - .then(function () { - expect(true).toBe(false) - }) -}) -``` - -## Et après ? - -- Intégrez `vue-test-utils` dans votre projet en [choisissant votre lanceur de tests](./choosing-a-test-runner.md) -- En apprendre plus sur les [techniques et astuces pour écrire des tests](./common-tips.md) diff --git a/docs/fr/guides/testing-SFCs-with-jest.md b/docs/fr/guides/testing-SFCs-with-jest.md deleted file mode 100644 index a0a8f9937..000000000 --- a/docs/fr/guides/testing-SFCs-with-jest.md +++ /dev/null @@ -1,178 +0,0 @@ -# Tester des composants monofichiers avec Jest - -> Un exemple de projet pour cette installation est disponible sur [GitHub](https://github.com/vuejs/vue-test-utils-jest-example). - -Jest est un lanceur de tests développé par Facebook. Il a pour but de procurer une solution complète de tests unitaires. Vous pouvez en apprendre plus sur Jest sur [sa documentation officielle](https://facebook.github.io/jest/). - -## Installer Jest - -On va supposer que vous commencez avec une installation qui a déjà webpack, vue-loader et Babel correctement configurés (ex. le template `webpack-simple` via `vue-cli`). - -La première chose à faire est d'installer Jest et `vue-test-utils` : - -```bash -$ npm install --save-dev jest @vue/test-utils -``` - -Ensuite, on doit définir un script dans notre `package.json`. - -```json -// package.json -{ - "scripts": { - "test": "jest" - } -} -``` - -## Traiter les composants monofichiers dans Jest - -Pour indiquer à Jest comment traiter les fichiers `*.vue`, on va avoir besoin d'installer et de configurer le préprocesseur `vue-jest` : - -``` bash -npm install --save-dev vue-jest -``` - -Ensuite, créez un objet `jest` dans `package.json` : - -``` json -{ - // ... - "jest": { - "moduleFileExtensions": [ - "js", - "json", - // indique à Jest de gérer les fichiers `*.vue` - "vue" - ], - "transform": { - // traite les fichiers `*.vue` avec `vue-jest` - ".*\\.(vue)$": "/node_modules/vue-jest" - } - } -} -``` - -> **Note :** `vue-jest` ne supporte actuellement pas toutes les fonctionnalités de `vue-loader`, par exemple le support des blocs personnalisés et du chargement de styles. De plus, quelques fonctionnalités spécifiques à webpack comme la scission de code ne sont pas supportées. Pour les utiliser, lisez le guide sur [tester des composants monofichiers avec Mocha et webpack](./testing-SFCs-with-mocha-webpack.md). - -## Gérer les alias webpack - -Si vous utilisez un alias de résolution dans la configuration de webpack, c.-à-d. faire un alias `@` pour `/src`, vous devez aussi ajouter une configuration pour Jest en utilisant l'option `moduleNameMapper` : - -``` json -{ - // ... - "jest": { - // ... - // supporte la même concordonance d'alias @ -> src dans le code source - "moduleNameMapper": { - "^@/(.*)$": "/src/$1" - } - } -} -``` - -## Configurer Babel pour Jest - - -Même si les dernières version de Node.js supportent la plupart des fonctionnalités ES2015, vous souhaitez quand même utiliser la syntaxe des modules ES ainsi que les fonctionnalités `stage-x` dans vos tests. Pour cela, on doit installer `babel-jest` : - -``` bash -npm install --save-dev babel-jest -``` - -Ensuite, on doit indiquer à Jest de gérer les fichiers de tests JavaScript avec `babel-jest` en ajoutant une entrée sous `jest.transform` dans `package.json` : - -``` json -{ - // ... - "jest": { - // ... - "transform": { - // ... - // gérer le JavaScript avec `babel-jest` - "^.+\\.js$": "/node_modules/babel-jest" - }, - // ... - } -} -``` - -> Par défaut, `babel-jest` va automatiquement s'autoconfigurer dès l'installation. Cependant, comme nous avons explicitement ajouté une transformation pour les fichiers `*.vue`, on se doit aussi d'explicitement configurer `babel-jest`. - -En supposant que vous utilisez `babel-preset-env` avec webpack, la configuration par défaut de Babel désactive la transpilation des modules ES car webpack sait déjà comment traiter ces modules. Nous devons, cependant, l'activer pour nos tests car, Jest fonctionne directement dans Node.js. - -On doit aussi indiquer à `babel-preset-env` d'utiliser la version de Node.js que nous utilisons. Cela empêchera de transpiler inutilement des fonctionnalités et lancera nos tests plus rapidement. - -Pour appliquer ces options uniquement aux tests, mettez-les dans un fichier de configuration différent sous `env.test` (cela va être automatiquement être utilisé par `babel-jest`). - -Exemple `.babelrc`: - -``` json -{ - "presets": [ - ["env", { "modules": false }] - ], - "env": { - "test": { - "presets": [ - ["env", { "targets": { "node": "current" }}] - ] - } - } -} -``` - -### Test d'instantanés - -Vous pouvez utiliser [`vue-server-renderer`](https://github.com/vuejs/vue/tree/dev/packages/vue-server-renderer) pour transformer un composant en une chaine de caractères afin de le sauvegarder dans un instantané pour [Jest tests d'instantanés](https://facebook.github.io/jest/docs/en/snapshot-testing.html). - -Le résultat du rendu de `vue-server-renderer` inclut quelques attributs spécifiques au rendu côté serveur. Il ignore les espaces, cela rend plus dur d'analyser une différence. On peut améliorer l'instantané sauvegardé avec un sérialiseur personnalisé : - -``` bash -npm install --save-dev jest-serializer-vue -``` - -Puis configurez-le dans `package.json`: - -``` json -{ - // ... - "jest": { - // ... - // sérialiseur pour les instantanés - "snapshotSerializers": [ - "/node_modules/jest-serializer-vue" - ] - } -} -``` - -### Placer les fichiers de tests - -Par défaut, Jest va récursivement récupérer tous les fichiers qui ont une extension en `.spec.js` ou `.test.js` dans le projet. Si cela ne correspond pas à vos besoins, il est possible [de changer l'expression régulière `testRegex`](https://facebook.github.io/jest/docs/en/configuration.html#testregex-string) dans la configuration se trouvant dans `package.json`. - -Jest recommande de créer un répertoire `__tests__` au même niveau que le code testé, mais soyez libre de structurer vos tests selon vos besoins. Soyez juste au courant que Jest créera un répertoire `__snapshots__` au même niveau que les fichiers de tests qui travaillent sur des instantanés. - -### Exemple d'une spécification - -Si vous êtes habitué à Jasmine, vous devriez très bien vous en sortir avec [l'API d'assertions de Jest](https://facebook.github.io/jest/docs/en/expect.html#content) : - -```js -import { mount } from '@vue/test-utils' -import Component from './component' - -describe('Component', () => { - test('est une instance de Vue', () => { - const wrapper = mount(Component) - expect(wrapper.isVueInstance()).toBeTruthy() - }) -}) -``` - -### Ressources - -- [Projet exemple pour cette installation](https://github.com/vuejs/vue-test-utils-jest-example) -- [Exemples et diapositives depuis la Vue Conf 2017](https://github.com/codebryo/vue-testing-with-jest-conf17) -- [Jest](https://facebook.github.io/jest/) -- [Babel preset env](https://github.com/babel/babel-preset-env) diff --git a/docs/fr/guides/testing-SFCs-with-mocha-webpack.md b/docs/fr/guides/testing-SFCs-with-mocha-webpack.md deleted file mode 100644 index 7f2482174..000000000 --- a/docs/fr/guides/testing-SFCs-with-mocha-webpack.md +++ /dev/null @@ -1,180 +0,0 @@ -# Tester des composants monofichiers avec Mocha + webpack - -> Un exemple de projet pour cette installation est disponible sur [GitHub](https://github.com/vuejs/vue-test-utils-mocha-webpack-example). - -Une des stratégies pour tester des composants monofichiers est de compiler tous nos tests via webpack puis de les passer dans un lanceur de tests. L'avantage de cette approche est qu'elle procure un support complet pour les fonctionnalités de webpack et de `vue-loader`, et ce, afin de ne pas réaliser de compromis dans notre code. - -Techniquement, vous pouvez utiliser n'importe quel lanceur de tests et relier le tout manuellement. Cependant, nous avons trouvé [`mocha-webpack`](https://github.com/zinserjan/mocha-webpack) qui procure une expérience très simplifiée pour cette tâche particulière. - -## Mettre en place `mocha-webpack` - -On va supposer que vous commencez avec une installation qui a déjà webpack, vue-loader et Babel correctement configurés (cf. le template `webpack-simple` via `vue-cli`). - -La première chose à faire est d'installer les dépendances de tests : - -``` bash -npm install --save-dev @vue/test-utils mocha mocha-webpack -``` - -Ensuite, on doit définir un script test dans notre `package.json`. - -```json -// package.json -{ - "scripts": { - "test": "mocha-webpack --webpack-config webpack.config.js --require test/setup.js test/**/*.spec.js" - } -} -``` - -Quelques éléments importants à noter : - -- Le paramètre `--webpack-config` indique le fichier de configuration webpack à utiliser pour les tests. Dans la plupart des cas, c'est identique à la configuration du projet actuel avec une petite modification. On en reparlera plus tard. - -- Le paramètre `--require` permet de s'assurer que le fichier `test/setup.js` est bien exécuté avant les tests. Dans celui-ci, on met en place l'environnement où nos tests vont être exécutés. - -- Le dernier paramètre est un glob pour indiquer les fichiers de tests à inclure dans le paquetage. - -### Configuration supplémentaire pour webpack - -#### Externaliser les dépendances npm - -Dans nos tests, nous allons surement importer un nombre conséquent de dépendances npm, certaines d'entre elles n'ont pas été conçues pour une utilisation dans un navigateur et ne peuvent être empaquetées par webpack. Il faut aussi considérer qu'externaliser les dépendances augmente énormément la vitesse de lancement des tests. On peut externaliser toutes les dépendances npm avec `webpack-node-externals` : - -```js -// webpack.config.js -const nodeExternals = require('webpack-node-externals') - -module.exports = { - // ... - externals: [nodeExternals()] -} -``` - -#### Coordinateur de sources - -La coordinateur de sources (« Source maps ») doit être indiquée pour être utilisé par `mocha-webpack`. La configuration recommandée est la suivante : - -``` js -module.exports = { - // ... - devtool: 'inline-cheap-module-source-map' -} -``` - -Si vous déboguez via votre IDE, il est recommandé d'ajouter la configuration suivante : - -``` js -module.exports = { - // ... - output: { - // ... - // utiliser des chemins absolus (c'est important si vous déboguez avec un IDE) - devtoolModuleFilenameTemplate: '[absolute-resource-path]', - devtoolFallbackModuleFilenameTemplate: '[absolute-resource-path]?[hash]' - } -} -``` - -### Mettre en place l'environnement du navigateur - -`vue-test-utils` requiert en environnement de navigateur pour fonctionner. On peut le simuler avec Node.js en utilisant `jsdom-global` : - -```bash -npm install --save-dev jsdom jsdom-global -``` - -Puis dans `test/setup.js`: - -``` js -require('jsdom-global')() -``` - -Cela ajoute un environnement de navigateur dans Node.js afin que `vue-test-utils` fonctionne correctement. - -### Choisir une bibliothèque d'assertions - -[Chai](http://chaijs.com/) est une bibliothèque populaire qui est généralement utilisée avec Mocha. Vous pouvez aussi jeter un coup d'œil à [Sinon](http://sinonjs.org/) pour créer des espions et des fonctions avec un comportement pré-programmé (« stubs »). - -Vous pouvez utiliser, alternativement, `expect` qui fait maintenant partie de Jest et expose [la même API](http://facebook.github.io/jest/docs/en/expect.html#content) dans la documentation de Jest. - -On va utiliser `expect` et le rendre globalement accessible afin de ne pas avoir à l'importer pour chaque test : - -``` bash -npm install --save-dev expect -``` - -Puis dans `test/setup.js`: - -``` js -require('jsdom-global')() - -global.expect = require('expect') -``` - -### Optimiser Babel pour les tests - -Notez que nous utilisons `babel-loader` pour gérer JavaScript. Vous devriez déjà avoir Babel de configuré si vous l'utilisez dans votre application via un fichier `.babelrc`. Ici `babel-loader` va automatiquement utiliser le même fichier de configuration. - -Une autre chose à noter est que si vous utilisez une version de Node.js 6+, qui supporte déjà une majorité des fonctionnalités d'ES2015, vous pouvez configurer séparément un autre Babel [env option](https://babeljs.io/docs/usage/babelrc/#env-option) qui va uniquement transpiler les fonctionnalités non supportées dans la version de Node.js que vous utilisez (c.-à-d. `stage-2` ou le support de la syntaxe flow, etc.). - -### Ajouter un test - -Créez dans le dossier `src` un fichier nommé `Counter.vue`: - -``` html - - - -``` - -Puis créez un test nommé `test/Counter.spec.js` avec le code suivant : - -```js -import { shallow } from '@vue/test-utils' -import Counter from '../src/Counter.vue' - -describe('Counter.vue', () => { - it('incrémente le compteur quand le bouton est cliqué', () => { - const wrapper = shallow(Counter) - wrapper.find('button').trigger('click') - expect(wrapper.find('div').text()).toMatch('1') - }) -}) -``` - -Et maintenant on peut lancer le test avec : - -``` -npm run unit -``` - -Woohoo, nos tests fonctionnent ! - -### Ressources - -- [Projet exemple pour cette installation](https://github.com/vuejs/vue-test-utils-mocha-webpack-example) -- [Mocha](https://mochajs.org/) -- [mocha-webpack](http://zinserjan.github.io/mocha-webpack/) -- [Chai](http://chaijs.com/) -- [Sinon](http://sinonjs.org/) -- [jest/expect](http://facebook.github.io/jest/docs/en/expect.html#content) diff --git a/docs/fr/guides/using-with-vue-router.md b/docs/fr/guides/using-with-vue-router.md deleted file mode 100644 index 9d43677dd..000000000 --- a/docs/fr/guides/using-with-vue-router.md +++ /dev/null @@ -1,72 +0,0 @@ -# Utilisation avec Vue Router - -## Installer Vue Router pour nos tests - -Vous ne devez jamais installer Vue Router sur le constructeur de base de Vue pour vos tests. Installer Vue Router de cette manière ajoute `$route` et `$router` en tant que propriétés en lecture seule sur le prototype Vue. - -Pour éviter cela, on peut utiliser une `localVue`, et installer Vue Router dessus. - -```js -import VueRouter from 'vue-router' -const localVue = createLocalVue() -localVue.use(VueRouter) -const router = new VueRouter() - -shallow(Component, { - localVue, - router -}) -``` - -## Tester des composants qui utilisent `router-link` ou `router-view` - -Quand vous installez Vue Router, les composants `router-link` et `router-view` sont enregistrés. Cela veut dire que l'on peut les utiliser n'importe où dans notre application sans avoir besoin de les importer. - -On doit donc rendre ces composants Vue Router disponibles au composant que nous testons. Il y a deux méthodes pour cela. - -### Utiliser des stubs - -```js -shallow(Component, { - stubs: ['router-link', 'router-view'] -}) -``` - -### Installer Vue Router et `localVue` - -```js -import VueRouter from 'vue-router' -const localVue = createLocalVue() - -localVue.use(VueRouter) - -shallow(Component, { - localVue -}) -``` - -## Simuler `$route` et `$router` - -Quelques fois, vous souhaitez tester qu'un composant réagisse correctement avec les paramètres des objets `$route` et `$router`. Pour cela, vous pouvez passer des imitations à l'instance de Vue. - -```js -const $route = { - path: '/un/super/chemin' -} - -const wrapper = shallow(Component, { - mocks: { - $route - } -}) - -wrapper.vm.$route.path // `'/un/super/chemin'` -``` - -## Trucs et astuces - -Installer Vue Router ajoute `$route` et `$router` en tant que propriétés en lecture seule au prototype de Vue. - -Cela veut dire que n'importe quel futur test qui va essayer de modifier `$route` ou `$router` va échouer. - -Pour éviter cela, n'installez jamais Vue Router quand vous lancez vos tests. diff --git a/docs/fr/guides/using-with-vuex.md b/docs/fr/guides/using-with-vuex.md deleted file mode 100644 index 1146ffb66..000000000 --- a/docs/fr/guides/using-with-vuex.md +++ /dev/null @@ -1,265 +0,0 @@ -# Utiliser avec Vuex - -Dans ce guide, nous allons voir comment tester Vuex dans des composants grâce à `vue-test-utils`. - -## Simuler des actions - -Regardons un peu de code ! - -Ci-dessous, le composant que nous voulons tester. Il fait appel à des actions Vuex. - -``` html - - - -``` - -Pour les objectifs de ce test, on se fiche de ce que les actions font, ou à ce quoi le store ressemble. On doit juste savoir si ces actions sont lancées lorsqu'elles sont supposées l'être, et ce, avec les valeurs attendues. - -Pour tester cela, on doit passer un store fictif à Vue lorsque l'on isole notre composant. - -Au lieu de passer le store au constructeur de base de Vue, on peut le passer à - [`localVue`](../api/options.md#localvue). Un `localVue` est un constructeur à portée limitée de Vue sur lequel on peut effectuer des changements sans avoir à affecter le constructeur global. - -Voyons à quoi cela ressemble : - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import Actions from '../../../src/components/Actions' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('Actions.vue', () => { - let actions - let store - - beforeEach(() => { - actions = { - actionClick: jest.fn(), - actionInput: jest.fn() - } - store = new Vuex.Store({ - state: {}, - actions - }) - }) - - it("appelle l'action `actionInput` du store quand la valeur du champ est `input` et qu'un évènement `input` est lancé", () => { - const wrapper = shallow(Actions, { store, localVue }) - const input = wrapper.find('input') - input.element.value = 'input' - input.trigger('input') - expect(actions.actionInput).toHaveBeenCalled() - }) - - it("n'appelle pas l'action `actionInput` du store quand la valeur du champ n'est pas `input` et qu'un évènement `input` est lancé", () => { - const wrapper = shallow(Actions, { store, localVue }) - const input = wrapper.find('input') - input.element.value = 'not input' - input.trigger('input') - expect(actions.actionInput).not.toHaveBeenCalled() - }) - - it("appelle l'action `actionClick` quand le bouton est cliqué", () => { - const wrapper = shallow(Actions, { store, localVue }) - wrapper.find('button').trigger('click') - expect(actions.actionClick).toHaveBeenCalled() - }) -}) -``` - -Que se passe-t-il ici ? Premièrement, on indique à Vue d'utiliser Vuex avec la méthode `localVue.use`. C'est tout simplement une surcouche de `Vue.use`. - -On va ensuite créer un store fictif en appelant `new Vuex.Store` avec nos propres valeurs. À noter que l'on indique uniquement nos actions, car on ne s'intéresse qu'à elles. - -Les actions sont des [fonctions de simulations de Jest](https://facebook.github.io/jest/docs/en/mock-functions.html). Ces fonctions nous donnent accès à des méthodes afin de réaliser des assertions si l'action a été appelée ou non. - -On peut ensuite s'assurer dans nos tests que les actions ont été appelées au bon moment. - -La manière dont on définit le store peut vous paraitre un peu étrange. - -On utilise `beforeEach` pour s'assurer que nous avons un store propre avant chaque test. `beforeEach` est un hook de Mocha qui est appelé avant chaque test. Dans nos tests, on réassigne des valeurs aux variables du store. Si on ne le fait pas, les fonctions de simulations auraient besoin d'être automatiquement réinitialisées. Cela nous laisse la possibilité de changer l'état dans nos tests, sans avoir à affecter les prochains. - -La chose la plus importante à noter dans ce test est que **l'on crée une simulation d'un store Vuex, qui est ensuite passé à `vue-test-utils`**. - -Génial, on peut désormais simuler des actions. Allons avoir comment simuler des accesseurs ! - -## Simuler des accesseurs - -``` html - - - -``` - -C'est un composant relativement simple. Il affiche le résultat des accesseurs `clicks` et `inputValue`. Encore une fois, on se fiche de savoir ce que ces accesseurs retournent. On souhaite juste savoir si les résultats sont affichés correctement. - -Jetons un œil à un test : - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import Getters from '../../../src/components/Getters' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('Getters.vue', () => { - let getters - let store - - beforeEach(() => { - getters = { - clicks: () => 2, - inputValue: () => 'input' - } - - store = new Vuex.Store({ - getters - }) - }) - - it('affiche `state.inputValue` dans la première balise

', () => { - const wrapper = shallow(Getters, { store, localVue }) - const p = wrapper.find('p') - expect(p.text()).toBe(getters.inputValue()) - }) - - it('affiche `stat.clicks` dans la seconde balise

', () => { - const wrapper = shallow(Getters, { store, localVue }) - const p = wrapper.findAll('p').at(1) - expect(p.text()).toBe(getters.clicks().toString()) - }) -}) -``` - -Ce test est similaire à notre test sur les actions. On créer un store fictif avant chaque test, on le passe ensuite comme une option lorsque l'on appelle `shallow`. Pour finir, on asserte que la valeur retournée par nos accesseurs fictifs est bien affichée. - -C'est génial, mais comment faisons-nous pour vérifier que nos accesseurs retournent correctement les parties de l'état ? - -## Simulation avec des modules - -Les [modules](https://vuex.vuejs.org/en/modules.html) sont utiles pour séparer un store en plusieurs morceaux. Ils exportent des accesseurs que l'on peut utiliser dans nos tests. - -Jetons un œil à ce composant : - -``` html - - - -``` - -Simple composant qui possède une action et un accesseur. - -Et le test : - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import Modules from '../../../src/components/Modules' -import module from '../../../src/store/module' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('Modules.vue', () => { - let actions - let state - let store - - beforeEach(() => { - state = { - module: { - clicks: 2 - } - } - - actions = { - moduleActionClick: jest.fn() - } - - store = new Vuex.Store({ - state, - actions, - getters: module.getters - }) - }) - - it("appelle l'action du store moduleActionClick quand le bouton est cliqué", () => { - const wrapper = shallow(Modules, { store, localVue }) - const button = wrapper.find('button') - button.trigger('click') - expect(actions.moduleActionClick).toHaveBeenCalled() - }) - - it('affiche `state.inputValue` dans la première balise

', () => { - const wrapper = shallow(Modules, { store, localVue }) - const p = wrapper.find('p') - expect(p.text()).toBe(state.module.clicks.toString()) - }) -}) -``` - -### Ressources - -- [Projet exemple pour ce guide](https://github.com/eddyerburgh/vue-test-utils-vuex-example) -- [`localVue`](../api/options.md#localvue) -- [`createLocalVue`](../api/createLocalVue.md) diff --git a/docs/guides/README.md b/docs/guides/README.md new file mode 100644 index 000000000..f57bd9e3a --- /dev/null +++ b/docs/guides/README.md @@ -0,0 +1,12 @@ +# Guides + +!!!include(docs/guides/getting-started.md)!!! +!!!include(docs/guides/common-tips.md)!!! +!!!include(docs/guides/dom-events.md)!!! +!!!include(docs/guides/choosing-a-test-runner.md)!!! +!!!include(docs/guides/testing-SFCs-with-jest.md)!!! +!!!include(docs/guides/testing-SFCs-with-mocha-webpack.md)!!! +!!!include(docs/guides/testing-SFCs-with-karma.md)!!! +!!!include(docs/guides/testing-async-components.md)!!! +!!!include(docs/guides/using-with-vue-router.md)!!! +!!!include(docs/guides/using-with-vuex.md)!!! \ No newline at end of file diff --git a/docs/en/guides/choosing-a-test-runner.md b/docs/guides/choosing-a-test-runner.md similarity index 96% rename from docs/en/guides/choosing-a-test-runner.md rename to docs/guides/choosing-a-test-runner.md index 08373a3ce..ba43906f1 100644 --- a/docs/en/guides/choosing-a-test-runner.md +++ b/docs/guides/choosing-a-test-runner.md @@ -1,4 +1,4 @@ -# Choosing a test runner +## Choosing a test runner A test runner is a program that runs tests. @@ -10,7 +10,7 @@ There are a few things to consider when choosing a test runner though: feature s - [mocha-webpack](https://github.com/zinserjan/mocha-webpack) is a wrapper around webpack + Mocha, but with a more streamlined interface and watch mode. The benefits of this setup is that we can get complete SFC support via webpack + `vue-loader`, but it requires more configuration upfront. -## Browser Environment +### Browser Environment Vue Test Utils relies on a browser environment. Technically you can run it in a real browser, but it's not recommended due to the complexity of launching real browsers on different platforms. Instead, we recommend running the tests in Node with a virtual browser environment using [JSDOM](https://github.com/tmpvar/jsdom). @@ -25,7 +25,7 @@ npm install --save-dev jsdom jsdom-global require('jsdom-global')() ``` -## Testing Single-File Components +### Testing Single-File Components Single-file Vue components (SFCs) require pre-compilation before they can be run in Node or in the browser. There are two recommended ways to perform the compilation: with a Jest preprocessor, or directly use webpack. @@ -36,7 +36,7 @@ Read the following guides for different setups: - [Testing SFCs with Jest](./testing-SFCs-with-jest.md) - [Testing SFCs with Mocha + webpack](./testing-SFCs-with-mocha-webpack.md) -## Resources +### Resources - [Test runner performance comparison](https://github.com/eddyerburgh/vue-unit-test-perf-comparison) - [Example project with Jest](https://github.com/vuejs/vue-test-utils-jest-example) diff --git a/docs/en/guides/common-tips.md b/docs/guides/common-tips.md similarity index 95% rename from docs/en/guides/common-tips.md rename to docs/guides/common-tips.md index cb518b2bb..a183eaa50 100644 --- a/docs/en/guides/common-tips.md +++ b/docs/guides/common-tips.md @@ -1,6 +1,6 @@ -# Common Tips +## Common Tips -## Knowing What to Test +### Knowing What to Test For UI components, we don't recommend aiming for complete line-based coverage, because it leads to too much focus on the internal implementation details of the components and could result in brittle tests. @@ -12,7 +12,7 @@ The benefit of this approach is that as long as your component's public interfac This topic is discussed with more details in a [great presentation by Matt O'Connell](http://slides.com/mattoconnell/deck#/). -## Shallow Rendering +### Shallow Rendering In unit tests, we typically want to focus on the component being tested as an isolated unit and avoid indirectly asserting the behavior of its child components. @@ -27,7 +27,7 @@ const wrapper = shallowMount(Component) // returns a Wrapper containing a mounte wrapper.vm // the mounted Vue instance ``` -## Asserting Emitted Events +### Asserting Emitted Events Each mounted wrapper automatically records all events emitted by the underlying Vue instance. You can retrieve the recorded events using the `wrapper.emitted()` method: @@ -58,7 +58,7 @@ expect(wrapper.emitted().foo[1]).toEqual([123]) You can also get an Array of the events in their emit order by calling [`wrapper.emittedByOrder()`](../api/wrapper/emittedByOrder.md). -## Manipulating Component State +### Manipulating Component State You can directly manipulate the state of the component using the `setData` or `setProps` method on the wrapper: @@ -68,7 +68,7 @@ wrapper.setData({ count: 10 }) wrapper.setProps({ foo: 'bar' }) ``` -## Mocking Props +### Mocking Props You can pass props to the component using Vue's built-in `propsData` option: @@ -86,7 +86,7 @@ You can also update the props of an already-mounted component with the `wrapper. *For a full list of options, please see the [mount options section](../api/options.md) of the docs.* -## Applying Global Plugins and Mixins +### Applying Global Plugins and Mixins Some of the components may rely on features injected by a global plugin or mixin, for example `vuex` and `vue-router`. @@ -109,7 +109,7 @@ mount(Component, { **Note some plugins, like Vue Router, add read-only properties to the global Vue constructor. This makes it impossible to reinstall the plugin on a `localVue` constructor, or add mocks for these read-only properties** -## Mocking Injections +### Mocking Injections Another strategy for injected props is simply mocking them. You can do that with the `mocks` option: @@ -130,10 +130,10 @@ mount(Component, { }) ``` -## Dealing with Routing +### Dealing with Routing Since routing by definition has to do with the overall structure of the application and involves multiple components, it is best tested via integration or end-to-end tests. For individual components that rely on `vue-router` features, you can mock them using the techniques mentioned above. -## Detecting styles +### Detecting styles Your test can only detect inline styles when running in `jsdom`. diff --git a/docs/en/guides/dom-events.md b/docs/guides/dom-events.md similarity index 96% rename from docs/en/guides/dom-events.md rename to docs/guides/dom-events.md index 63d4f9222..6761f31e7 100644 --- a/docs/en/guides/dom-events.md +++ b/docs/guides/dom-events.md @@ -1,6 +1,6 @@ -# Testing Key, Mouse and other DOM events +## Testing Key, Mouse and other DOM events -## Trigger events +### Trigger events The `Wrapper` expose a `trigger` method. It can be used to trigger DOM events. @@ -18,7 +18,7 @@ const wrapper = mount(MyComponent) wrapper.find('button').trigger('click') ``` -## Options +### Options The `trigger` method takes an optional `options` object. The properties in the `options` object are added to the Event. @@ -31,7 +31,7 @@ wrapper.trigger('click', { button: 0 }) ``` -## Mouse Click Example +### Mouse Click Example **Component under test** @@ -85,7 +85,7 @@ describe('Click event', () => { }) ``` -## Keyboard Example +### Keyboard Example **Component under test** @@ -207,6 +207,6 @@ A key name after the dot `keydown.up` is translated to a `keyCode`. This is supp | pageup | 33 | | pagedown | 34 | -## Important +### Important Vue Test Utils triggers event synchronously. Consequently, `Vue.nextTick` is not required. diff --git a/docs/en/guides/getting-started.md b/docs/guides/getting-started.md similarity index 99% rename from docs/en/guides/getting-started.md rename to docs/guides/getting-started.md index e93c081bb..504a6220e 100644 --- a/docs/en/guides/getting-started.md +++ b/docs/guides/getting-started.md @@ -1,6 +1,6 @@ -# Getting Started +## Getting Started -## Setup +### Setup To get a quick taste of using Vue Test Utils, clone our demo repository with basic setup and install the dependencies: @@ -138,7 +138,7 @@ it('will catch the error using a promise', () => { }) ``` -## What's Next +### What's Next - Integrate Vue Test Utils into your project by [choosing a test runner](./choosing-a-test-runner.md). - Learn more about [common techniques when writing tests](./common-tips.md). diff --git a/docs/en/guides/testing-SFCs-with-jest.md b/docs/guides/testing-SFCs-with-jest.md similarity index 96% rename from docs/en/guides/testing-SFCs-with-jest.md rename to docs/guides/testing-SFCs-with-jest.md index 119f8e506..821c2fc5f 100644 --- a/docs/en/guides/testing-SFCs-with-jest.md +++ b/docs/guides/testing-SFCs-with-jest.md @@ -1,10 +1,10 @@ -# Testing Single File Components with Jest +## Testing Single File Components with Jest > An example project for this setup is available on [GitHub](https://github.com/vuejs/vue-test-utils-jest-example). Jest is a test runner developed by Facebook, aiming to deliver a battery-included unit testing solution. You can learn more about Jest on its [official documentation](https://facebook.github.io/jest/). -## Setting up Jest +#### Setting up Jest We will assume you are starting with a setup that already has webpack, vue-loader and Babel properly configured - e.g. the `webpack-simple` template scaffolded by `vue-cli`. @@ -25,7 +25,7 @@ Next we need to define a unit script in our `package.json`. } ``` -## Processing SFCs in Jest +### Processing SFCs in Jest To teach Jest how to process `*.vue` files, we will need to install and configure the `vue-jest` preprocessor: @@ -55,7 +55,7 @@ Next, create a `jest` block in `package.json`: > **Note:** `vue-jest` currently does not support all the features of `vue-loader`, for example custom block support and style loading. In addition, some webpack-specific features such as code-splitting are not supported either. To use these unsupported features, you need to use Mocha instead of Jest to run your tests, and webpack to compile your components. To get started, read the guide on [testing SFCs with Mocha + webpack](./testing-SFCs-with-mocha-webpack.md). -## Handling webpack Aliases +### Handling webpack Aliases If you use a resolve alias in the webpack config, e.g. aliasing `@` to `/src`, you need to add a matching config for Jest as well, using the `moduleNameMapper` option: @@ -72,7 +72,7 @@ If you use a resolve alias in the webpack config, e.g. aliasing `@` to `/src`, y } ``` -## Configuring Babel for Jest +### Configuring Babel for Jest Although latest versions of Node already supports most ES2015 features, you may still want to use ES modules syntax and stage-x features in your tests. For that we need to install `babel-jest`: @@ -123,7 +123,7 @@ Example `.babelrc`: } ``` -## Snapshot Testing +### Snapshot Testing You can use [`vue-server-renderer`](https://github.com/vuejs/vue/tree/dev/packages/vue-server-renderer) to render a component into a string so that it can be saved as a snapshot for [Jest snapshot testing](https://facebook.github.io/jest/docs/en/snapshot-testing.html). @@ -148,13 +148,13 @@ Then configure it in `package.json`: } ``` -## Placing Test Files +### Placing Test Files By default, Jest will recursively pick up all files that have a `.spec.js` or `.test.js` extension in the entire project. If this does not fit your needs, it's possible [to change the `testRegex`](https://facebook.github.io/jest/docs/en/configuration.html#testregex-string) in the config section in the `package.json` file. Jest recommends creating a `__tests__` directory right next to the code being tested, but feel free to structure your tests as you see fit. Just beware that Jest would create a `__snapshots__` directory next to test files that performs snapshot testing. -## Coverage +### Coverage Jest can be used to generate coverage reports in multiple formats. The following is a simple example to get started with: @@ -186,7 +186,7 @@ This will enable coverage reports with the [default coverage reporters](https:// Further documentation can be found in the [Jest configuration documentation](https://facebook.github.io/jest/docs/en/configuration.html#collectcoverage-boolean), where you can find options for coverage thresholds, target output directories, etc. -## Example Spec +### Example Spec If you are familiar with Jasmine, you should feel right at home with Jest's [assertion API](https://facebook.github.io/jest/docs/en/expect.html#content): @@ -202,7 +202,7 @@ describe('Component', () => { }) ``` -## Resources +### Resources - [Example project for this setup](https://github.com/vuejs/vue-test-utils-jest-example) - [Examples and slides from Vue Conf 2017](https://github.com/codebryo/vue-testing-with-jest-conf17) diff --git a/docs/en/guides/testing-SFCs-with-karma.md b/docs/guides/testing-SFCs-with-karma.md similarity index 98% rename from docs/en/guides/testing-SFCs-with-karma.md rename to docs/guides/testing-SFCs-with-karma.md index 84ec750f9..273de449e 100644 --- a/docs/en/guides/testing-SFCs-with-karma.md +++ b/docs/guides/testing-SFCs-with-karma.md @@ -1,10 +1,10 @@ -# Testing Single File Components with Karma +## Testing Single File Components with Karma > An example project for this setup is available on [GitHub](https://github.com/eddyerburgh/vue-test-utils-karma-example). Karma is a test runner that launches browsers, runs tests, and reports them back to us. We're going to use the Mocha framework to write the tests. We'll use the chai library for test assertions. -## Setting up Mocha +### Setting up Mocha We will assume you are starting with a setup that already has webpack, vue-loader and Babel properly configured - e.g. the `webpack-simple` template scaffolded by `vue-cli`. diff --git a/docs/en/guides/testing-SFCs-with-mocha-webpack.md b/docs/guides/testing-SFCs-with-mocha-webpack.md similarity index 98% rename from docs/en/guides/testing-SFCs-with-mocha-webpack.md rename to docs/guides/testing-SFCs-with-mocha-webpack.md index da81bad3a..a46149f66 100644 --- a/docs/en/guides/testing-SFCs-with-mocha-webpack.md +++ b/docs/guides/testing-SFCs-with-mocha-webpack.md @@ -1,4 +1,4 @@ -# Testing Single File Components with Mocha + webpack +## Testing Single File Components with Mocha + webpack > An example project for this setup is available on [GitHub](https://github.com/vuejs/vue-test-utils-mocha-webpack-example). @@ -6,7 +6,7 @@ Another strategy for testing SFCs is compiling all our tests via webpack and the You can technically use any test runner you like and manually wire things together, but we've found [`mocha-webpack`](https://github.com/zinserjan/mocha-webpack) to provide a very streamlined experience for this particular task. -## Setting Up `mocha-webpack` +### Setting Up `mocha-webpack` We will assume you are starting with a setup that already has webpack, vue-loader and Babel properly configured - e.g. the `webpack-simple` template scaffolded by `vue-cli`. diff --git a/docs/en/guides/testing-async-components.md b/docs/guides/testing-async-components.md similarity index 99% rename from docs/en/guides/testing-async-components.md rename to docs/guides/testing-async-components.md index e22fbd74d..19307989a 100644 --- a/docs/en/guides/testing-async-components.md +++ b/docs/guides/testing-async-components.md @@ -1,4 +1,4 @@ -# Testing Asynchronous Behavior +## Testing Asynchronous Behavior To simplify testing, Vue Test Utils applies DOM updates _synchronously_. However, there are some techniques you need to be aware of when testing a component with asynchronous behavior such as callbacks or promises. diff --git a/docs/en/guides/using-with-vue-router.md b/docs/guides/using-with-vue-router.md similarity index 92% rename from docs/en/guides/using-with-vue-router.md rename to docs/guides/using-with-vue-router.md index 1b06c6a63..36ecde098 100644 --- a/docs/en/guides/using-with-vue-router.md +++ b/docs/guides/using-with-vue-router.md @@ -1,6 +1,6 @@ -# Using with Vue Router +## Using with Vue Router -## Installing Vue Router in tests +### Installing Vue Router in tests You should never install Vue Router on the Vue base constructor in tests. Installing Vue Router adds `$route` and `$router` as read-only properties on Vue prototype. @@ -22,7 +22,7 @@ shallowMount(Component, { > **Note:** Installing Vue Router on a `localVue` also adds `$route` and `$router` as read-only properties to a `localVue`. This means you can not use the `mocks` option to overwrite `$route` and `$router` when mounting a component using a `localVue` with Vue Router installed. -## Testing components that use `router-link` or `router-view` +### Testing components that use `router-link` or `router-view` When you install Vue Router, the `router-link` and `router-view` components are registered. This means we can use them anywhere in our application without needing to import them. @@ -52,7 +52,7 @@ shallowMount(Component, { }) ``` -## Mocking `$route` and `$router` +### Mocking `$route` and `$router` Sometimes you want to test that a component does something with parameters from the `$route` and `$router` objects. To do that, you can pass custom mocks to the Vue instance. @@ -72,7 +72,7 @@ const wrapper = shallowMount(Component, { wrapper.vm.$route.path // /some/path ``` -## Common gotchas +### Common gotchas Installing Vue Router adds `$route` and `$router` as read-only properties on Vue prototype. diff --git a/docs/en/guides/using-with-vuex.md b/docs/guides/using-with-vuex.md similarity index 99% rename from docs/en/guides/using-with-vuex.md rename to docs/guides/using-with-vuex.md index 51b959026..54d65f764 100644 --- a/docs/en/guides/using-with-vuex.md +++ b/docs/guides/using-with-vuex.md @@ -1,9 +1,7 @@ -# Using with Vuex +## Using with Vuex In this guide, we'll see how to test Vuex in components with Vue Test Utils, and how to approach testing a Vuex store. -## Testing Vuex in components - ### Mocking Actions Let’s look at some code. @@ -261,7 +259,7 @@ describe('Modules.vue', () => { }) ``` -## Testing a Vuex Store +### Testing a Vuex Store There are two approaches to testing a Vuex store. The first approach is to unit test the getters, mutations, and actions separately. The second approach is to create a store and test against that. We'll look at both approaches. @@ -382,7 +380,7 @@ test('updates evenOrOdd getter when increment is commited', () => { Notice that we use `cloneDeep` to clone the store config before creating a store with it. This is because Vuex mutates the options object used to create the store. To make sure we have a clean store in each test, we need to clone the `storeConfig` object. -## Resources +### Resources - [Example project for testing the components](https://github.com/eddyerburgh/vue-test-utils-vuex-example) - [Example project for testing the store](https://github.com/eddyerburgh/testing-vuex-store-example) diff --git a/docs/kr/README.md b/docs/kr/README.md deleted file mode 100644 index 1cb4e20e2..000000000 --- a/docs/kr/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# vue-test-utils - -`vue-test-utils`은 Vue.js를 위한 공식 유닛 테스팅 유틸리티 라이브러리입니다. - -## 목차 - -* [가이드](guides/README.md) - * [시작하기](guides/getting-started.md) - * [일반적인 팁](guides/common-tips.md) - * [마우스, 키 그리고 기타 DOM 이벤트](guides/dom-events.md) - * [테스트 러너 선택하기](guides/choosing-a-test-runner.md) - * [Jest로 싱글 파일 컴포넌트 테스트](guides/testing-SFCs-with-jest.md) - * [Mocha + webpack으로 싱글 파일 컴포넌트 테스트](guides/testing-SFCs-with-mocha-webpack.md) - * [Vue Router 사용하기](guides/using-with-vue-router.md) - * [Vuex 사용하기](guides/using-with-vuex.md) -* [API](api/README.md) - * [mount](api/mount.md) - * [shallow](api/shallow.md) - * [Mounting Options](api/options.md) - - [context](api/options.md#context) - - [slots](api/options.md#slots) - - [stubs](api/options.md#stubs) - - [mocks](api/options.md#mocks) - - [localVue](api/options.md#localvue) - - [attachToDocument](api/options.md#attachtodocument) - - [attrs](api/options.md#attrs) - - [listeners](api/options.md#listeners) - * [Wrapper](api/wrapper/README.md) - * [contains](api/wrapper/contains.md) - * [emitted](api/wrapper/emitted.md) - * [emittedByOrder](api/wrapper/emittedByOrder.md) - * [find](api/wrapper/find.md) - * [findAll](api/wrapper/findAll.md) - * [hasAttribute](api/wrapper/hasAttribute.md) - * [hasClass](api/wrapper/hasClass.md) - * [hasProp](api/wrapper/hasProp.md) - * [html](api/wrapper/html.md) - * [is](api/wrapper/is.md) - * [isEmpty](api/wrapper/isEmpty.md) - * [isVueInstance](api/wrapper/isVueInstance.md) - * [name](api/wrapper/name.md) - * [setComputed](api/wrapper/setComputed.md) - * [setData](api/wrapper/setData.md) - * [setMethods](api/wrapper/setMethods.md) - * [setProps](api/wrapper/setProps.md) - * [text](api/wrapper/text.md) - * [trigger](api/wrapper/trigger.md) - * [update](api/wrapper/update.md) - * [destroy](api/wrapper/destroy.md) - * [WrapperArray](api/wrapper-array/README.md) - * [at](api/wrapper-array/at.md) - * [contains](api/wrapper-array/contains.md) - * [hasAttribute](api/wrapper-array/hasAttribute.md) - * [hasClass](api/wrapper-array/hasClass.md) - * [hasProp](api/wrapper-array/hasProp.md) - * [is](api/wrapper-array/is.md) - * [isEmpty](api/wrapper-array/isEmpty.md) - * [isVueInstance](api/wrapper-array/isVueInstance.md) - * [setComputed](api/wrapper-array/setComputed.md) - * [setData](api/wrapper-array/setData.md) - * [setMethods](api/wrapper-array/setMethods.md) - * [setProps](api/wrapper-array/setProps.md) - * [trigger](api/wrapper-array/trigger.md) - * [update](api/wrapper-array/update.md) - * [destroy](api/wrapper-array/destroy.md) - * [components](api/components/README.md) - * [TransitionStub](api/components/TransitionStub.md) - * [TransitionGroupStub](api/components/TransitionGroupStub.md) - * [Selectors](api/selectors.md) - * [createLocalVue](api/createLocalVue.md) - * [config](api/config.md) diff --git a/docs/kr/SUMMARY.md b/docs/kr/SUMMARY.md deleted file mode 100644 index 7864eccd0..000000000 --- a/docs/kr/SUMMARY.md +++ /dev/null @@ -1,64 +0,0 @@ -## Table of Contents - -* [Guides](guides/README.md) - * [Getting Started](guides/getting-started.md) - * [Common Tips](guides/common-tips.md) - * [Mouse, Key and other DOM Events](guides/dom-events.md) - * [Choosing a test runner](guides/choosing-a-test-runner.md) - * [Testing SFCs with Jest](guides/testing-SFCs-with-jest.md) - * [Testing SFCs with Mocha + webpack](guides/testing-SFCs-with-mocha-webpack.md) - * [Using with Vue Router](guides/using-with-vue-router.md) - * [Using with Vuex](guides/using-with-vuex.md) -* [API](api/README.md) - * [mount](api/mount.md) - * [shallow](api/shallow.md) - * [Mounting Options](api/options.md) - - [context](api/options.md#context) - - [slots](api/options.md#slots) - - [stubs](api/options.md#stubs) - - [mocks](api/options.md#mocks) - - [localVue](api/options.md#localvue) - - [attachToDocument](api/options.md#attachtodocument) - - [attrs](api/options.md#attrs) - - [listeners](api/options.md#listeners) - * [Wrapper](api/wrapper/README.md) - * [contains](api/wrapper/contains.md) - * [emitted](api/wrapper/emitted.md) - * [emittedByOrder](api/wrapper/emittedByOrder.md) - * [find](api/wrapper/find.md) - * [findAll](api/wrapper/findAll.md) - * [hasAttribute](api/wrapper/hasAttribute.md) - * [hasClass](api/wrapper/hasClass.md) - * [hasProp](api/wrapper/hasProp.md) - * [html](api/wrapper/html.md) - * [is](api/wrapper/is.md) - * [isEmpty](api/wrapper/isEmpty.md) - * [isVueInstance](api/wrapper/isVueInstance.md) - * [name](api/wrapper/name.md) - * [setData](api/wrapper/setData.md) - * [setMethods](api/wrapper/setMethods.md) - * [setProps](api/wrapper/setProps.md) - * [text](api/wrapper/text.md) - * [trigger](api/wrapper/trigger.md) - * [destroy](api/wrapper/destroy.md) - * [WrapperArray](api/wrapper-array/README.md) - * [at](api/wrapper-array/at.md) - * [contains](api/wrapper-array/contains.md) - * [hasAttribute](api/wrapper-array/hasAttribute.md) - * [hasClass](api/wrapper-array/hasClass.md) - * [hasProp](api/wrapper-array/hasProp.md) - * [is](api/wrapper-array/is.md) - * [isEmpty](api/wrapper-array/isEmpty.md) - * [isVueInstance](api/wrapper-array/isVueInstance.md) - * [setComputed](api/wrapper-array/setComputed.md) - * [setData](api/wrapper-array/setData.md) - * [setMethods](api/wrapper-array/setMethods.md) - * [setProps](api/wrapper-array/setProps.md) - * [trigger](api/wrapper-array/trigger.md) - * [destroy](api/wrapper-array/destroy.md) - * [components](api/components/README.md) - * [TransitionStub](api/components/TransitionStub.md) - * [TransitionGroupStub](api/components/TransitionGroupStub.md) - * [Selectors](api/selectors.md) - * [createLocalVue](api/createLocalVue.md) - * [config](api/config.md) diff --git a/docs/kr/api/README.md b/docs/kr/api/README.md deleted file mode 100644 index f04765f52..000000000 --- a/docs/kr/api/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# API - -* [mount](./mount.md) -* [shallow](./shallow.md) -* [마운팅 옵션](./options.md) - - [context](./options.md#context) - - [slots](./options.md#slots) - - [stubs](./options.md#stubs) - - [mocks](./options.md#mocks) - - [localVue](./options.md#localvue) - - [attachToDocument](./options.md#attachtodocument) - - [attrs](./options.md#attrs) - - [listeners](./options.md#listeners) -* [Wrapper](./wrapper/README.md) - * [contains](./wrapper/contains.md) - * [emitted](./wrapper/emitted.md) - * [emittedByOrder](./wrapper/emittedByOrder.md) - * [find](./wrapper/find.md) - * [findAll](./wrapper/findAll.md) - * [hasAttribute](./wrapper/hasAttribute.md) - * [hasClass](./wrapper/hasClass.md) - * [hasProp](./wrapper/hasProp.md) - * [html](./wrapper/html.md) - * [is](./wrapper/is.md) - * [isEmpty](./wrapper/isEmpty.md) - * [isVueInstance](./wrapper/isVueInstance.md) - * [name](./wrapper/name.md) - * [setData](./wrapper/setData.md) - * [setProps](./wrapper/setProps.md) - * [text](./wrapper/text.md) - * [trigger](./wrapper/trigger.md) -* [WrapperArray](./wrapper-array/README.md) - * [at](./wrapper-array/at.md) - * [contains](./wrapper-array/contains.md) - * [hasAttribute](./wrapper-array/hasAttribute.md) - * [hasClass](./wrapper-array/hasClass.md) - * [hasProp](./wrapper-array/hasProp.md) - * [is](./wrapper-array/is.md) - * [isEmpty](./wrapper-array/isEmpty.md) - * [isVueInstance](./wrapper-array/isVueInstance.md) - * [setData](./wrapper-array/setData.md) - * [setProps](./wrapper-array/setProps.md) - * [trigger](./wrapper-array/trigger.md) -* [createLocalVue](./createLocalVue.md) -* [Selectors](./selectors.md) diff --git a/docs/kr/api/components/README.md b/docs/kr/api/components/README.md deleted file mode 100644 index 3e752eaa9..000000000 --- a/docs/kr/api/components/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# 컴포넌트 - -vue-test-utils에는 컴포넌트를 스텁하는데 사용할 수 있는 유틸리티 컴포넌트가 포함되어 있습니다. - -[TransitionStub](./TransitionStub.md)과 [TransitionGroupStub](./TransitionGroupStub.md)은 기본적으로 `transition` 및 `transition-group` 컴포넌트를 스텁하는데 사용됩니다. 설정을 수정해 스텁을 바꿀 수 있습니다. diff --git a/docs/kr/api/components/TransitionGroupStub.md b/docs/kr/api/components/TransitionGroupStub.md deleted file mode 100644 index f2c444a95..000000000 --- a/docs/kr/api/components/TransitionGroupStub.md +++ /dev/null @@ -1,32 +0,0 @@ -# TransitionGroupStub - -`transition-group`은 래퍼 컴포넌트를 스텁하는 컴포넌트입니다. 트랜지션을 비동기로 수행하는 대신, 동기적으로 자식 컴포넌트를 반환합니다. - -이것은 vue-test-utils에서 기본 config에서 모든 `transition-group` 컴포넌트를 스텁하도록 설정되어 있습니다. 내장된 `transition-group` 래퍼 컴포넌트를 기본으로 쓰고싶다면, `config.stubs[transition-group]`을 false로 설정합시다.: - - -```js -import VueTestUtils from '@vue/test-utils' - -VueTestUtils.config.stubs.transition = false -``` - -트랜지션 컴포넌트를 스텁으로 재설정하려면 다음을 하십시오. - -```js -import VueTestUtils, { TransitionGroupStub } from '@vue/test-utils' - -VueTestUtils.config.stubs['transition-group'] = TransitionGroupStub -``` - -마운트 옵션에서 스텁으로 설정하려면 다음을 하십시오. - -```js -import { mount, TransitionGroupStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - 'transition-group': TransitionGroupStub - } -}) -``` diff --git a/docs/kr/api/components/TransitionStub.md b/docs/kr/api/components/TransitionStub.md deleted file mode 100644 index 5ecf953b4..000000000 --- a/docs/kr/api/components/TransitionStub.md +++ /dev/null @@ -1,33 +0,0 @@ -# TransitionStub - -`transition` 래퍼 컴포넌트를 스텁하는 컴포넌트입니다. 트랜지션을 비동기로 수행하는 대신 동기적으로 하위 컴포넌트를 반환합니다. - - -이는 vue-test-utils에서 기본적으로 모든 `transition` 컴포넌트를 스텁하도록 설정됩니다. 내장된 `transition` 래퍼 컴포넌트를 `config.stubs.transition`을 false로 설정하려면: - -```js -import VueTestUtils from '@vue/test-utils' - -VueTestUtils.config.stubs.transition = false -``` - -트랜지션 컴포넌트를 스텁으로 재설정하려면 다음을 하십시오. - -```js -import VueTestUtils, { TransitionStub } from '@vue/test-utils' - -VueTestUtils.config.stubs.transition = TransitionStub -``` - -마운트 옵션에서 스텁으로 설정하려면 다음을 하십시오. - - -```js -import { mount, TransitionStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - transition: TransitionStub - } -}) -``` diff --git a/docs/kr/api/config.md b/docs/kr/api/config.md deleted file mode 100644 index 89663c2b3..000000000 --- a/docs/kr/api/config.md +++ /dev/null @@ -1,25 +0,0 @@ -# Config - -vue-test-utils는 내부에서 사용할 설정 객체를 포함합니다. - -## `vue-test-utils` 설정 옵션 - -### `stubs` - -- 타입: `Object` -- 기본값: `{ - transition: TransitionStub, - 'transition-group': TransitionGroupStub -}` - -컴포넌트에서 사용할 스텁. 전달된 마운트 옵션 안에 `stubs`가 있으면 덮어씁니다. - -`stubs`를 마운트 옵션에 배열로 전달하면 `config.stubs`는 배열로 변환되고 div를 반환하는 기본 컴포넌트로 컴포넌트를 스텁합니다. - -예: - -```js -import VueTestUtils from '@vue/test-utils' - -VueTestUtils.config.stubs['my-compomnent'] = '

' -``` diff --git a/docs/kr/api/createLocalVue.md b/docs/kr/api/createLocalVue.md deleted file mode 100644 index 91283bf77..000000000 --- a/docs/kr/api/createLocalVue.md +++ /dev/null @@ -1,27 +0,0 @@ -# createLocalVue() - -- **반환값:** - - `{Component}` - -- **사용법:** - -`createLocalVue`는 글로벌 Vue 클래스를 더럽히지 않고 컴포넌트, 믹스인 그리고 플러그인을 추가할 수 있는 Vue 클래스를 반환합니다. - -`options.localVue`로 사용합니다. - -```js -import { createLocalVue, shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const localVue = createLocalVue() -const wrapper = shallow(Foo, { - localVue, - mocks: { foo: true } -}) -expect(wrapper.vm.foo).toBe(true) - -const freshWrapper = shallow(Foo) -expect(freshWrapper.vm.foo).toBe(false) -``` - -- **함께 보기:** [일반적인 팁](../guides/common-tips.md#applying-global-plugins-and-mixins) diff --git a/docs/kr/api/mount.md b/docs/kr/api/mount.md deleted file mode 100644 index ea44f6e65..000000000 --- a/docs/kr/api/mount.md +++ /dev/null @@ -1,130 +0,0 @@ -# mount(component {, options}]) - -- **전달인자:** - - - `{Component} 컴포넌트` - - `{Object} 옵션` - -- **반환값:** `{Wrapper}` - -- **옵션:** - -[옵션](options.md)을 참고하세요. - -- **사용법:** - -첫번째 DOM 노드 또는 Vue 컴포넌트와 일치하는 셀렉터의 [`Wrapper`](wrapper/README.md)를 반환합니다. - -올바른 [selector](selectors.md)를 사용하세요. - -**옵션없이 사용** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` -**Vue 옵션과 사용** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - propsData: { - color: 'red' - } - }) - expect(wrapper.props().color).toBe('red') - }) -}) -``` - -**DOM에 붙이기** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - attachToDocument: true - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` -**기본 값, 이름을 가지고 있는 슬롯** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import FooBar from './FooBar.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - slots: { - default: [Bar, FooBar], - fooBar: FooBar, // 와 일치하는. - foo: '
' - } - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**글로벌 속성 스텁** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const $route = { path: 'http://www.example-path.com' } - const wrapper = mount(Foo, { - mocks: { - $route - } - }) - expect(wrapper.vm.$route.path).toBe($route.path) - }) -}) -``` - -**컴포넌트 스텁** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import Faz from './Faz.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - stub: { - Bar: '
와 일치하는., - foo: '
' - } -}) -expect(wrapper.find('div')).toBe(true) -``` - -### `stubs` - -- 타입: `{ [name: string]: Component | boolean } | Array` - -자식 컴포넌트를 스텁합니다. 스텁 또는 객체에 대한 컴포넌트 이름의 배열일 수 있습니다. - -예: - -```js -import Foo from './Foo.vue' - -mount(Component, { - stubs: ['registered-component'] -}) - -shallow(Component, { - stubs: { - // 특정 구현을 스텁으로 한다. - 'registered-component': Foo, - // 기본 구현을 스텁으로 생성한다. - 'another-component': true - } -}) -``` - -### `mocks` - -- 타입: `Object` - -인스턴스에 추가 특성(prop)을 추가하십시오. 글로벌 인젝션을 목킹하는데 유용합니다. - -예: - -```js -const $route = { path: 'http://www.example-path.com' } -const wrapper = shallow(Component, { - mocks: { - $route - } -}) -expect(wrapper.vm.$route.path).toBe($route.path) -``` - -### `localVue` - -- 타입: `Vue` - -localVue는 [createLocalVue](./createLocalVue.md)에 의해 생성된 Vue의 로컬 복사본입니다. 컴포넌트를 마운트할 때, 이 Vue 복사본에 플러그인을 설치하면 `Vue` 원본을 오염시키지 않습니다. - -예: - -```js -import { createLocalVue, mount } from '@vue/test-utils' -import VueRouter from 'vue-router' -import Foo from './Foo.vue' - -const localVue = createLocalVue() -localVue.use(VueRouter) - -const routes = [ - { path: '/foo', component: Foo } -] - -const router = new VueRouter({ - routes -}) - -const wrapper = mount(Component, { - localVue, - router -}) -expect(wrapper.vm.$route).toBeInstanceOf(Object) -``` - -### `attachToDocument` - -- 타입: `boolean` -- default: `false` - -`true`로 설정된 경우 렌더링될 때 컴포넌트는 DOM에 연결됩니다. - -### `attrs` - -- 타입: `Object` - -컴포넌트 인스턴스의 `$attrs`를 설정합니다. - -### `listeners` - -- 타입: `Object` - -컴포넌트 인스턴스의 `$listeners`를 설정합니다. diff --git a/docs/kr/api/selectors.md b/docs/kr/api/selectors.md deleted file mode 100644 index 949ac22d3..000000000 --- a/docs/kr/api/selectors.md +++ /dev/null @@ -1,53 +0,0 @@ -# 셀렉터 - -많은 메소드가 셀렉터를 전달인자로 사용합니다. 셀렉터는 CSS 셀렉터, Vue 컴포넌트 또는 find 옵션 객체가 될 수 있습니다. - -## CSS 셀렉터 - -mount는 유효한 CSS 셀렉터를 처리합니다. - -- tag 셀렉터 (div, foo, bar) -- class 셀렉터 (.foo, .bar) -- attribute 셀렉터 ([foo], [foo="bar"]) -- id 셀렉터 (#foo, #bar) -- pseudo 셀렉터 (div:first-of-type) - -컴비네이터 또한 사용할 수 있습니다. - -- direct descendant combinator (div > #bar > .foo) -- general descendant combinator (div #bar .foo) -- adjacent sibling selector (div + .foo) -- general sibling selector (div ~ .foo) - -## Vue 컴포넌트 - -Vue 컴포넌트 또한 셀렉터로 사용할 수 있습니다. - -`vue-test-utils`는 `name` 속성을 사용하여 인스턴스 트리에서 일치하는 Vue 컴포넌트를 찾습니다. - -```js -// Foo.vue - -export default{ - name: 'FooComponent' -} -``` - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = shallow(Foo) -expect(wrapper.is(Foo)).toBe(true) -``` - -## 옵션 오브젝트 찾기 - -### Ref - -find 옵션 객체를 사용해 `vue-test-utils`는 래퍼 컴포넌트에서 $ref로 엘리먼트를 셀렉트할 수 있습니다. - -```js -const buttonWrapper = wrapper.find({ ref: 'myButton' }) -buttonWrapper.trigger('click') -``` diff --git a/docs/kr/api/shallow.md b/docs/kr/api/shallow.md deleted file mode 100644 index 352374190..000000000 --- a/docs/kr/api/shallow.md +++ /dev/null @@ -1,118 +0,0 @@ -# shallow(component {, options}]) - -- **전달인자:** - - - `{Component} component` - - `{Object} options` - - `{boolean} attachToDocument` - - `{Object} context` - - `{Object} slots` - - `{Array|Component|String} default` - - `{Array|Component|String} named` - - `{Object} mocks` - - `{Object|Array} stubs` - - `{Object} children` - - `{Vue} localVue` - -- **반환값:** `{Wrapper}` - -- **옵션:** - -[options](./options.md)을 확인하세요 - -- **사용법:** - -첫번째 DOM 노드 또는 Vue 컴포넌트와 일치하는 셀렉터의 [`Wrapper`](wrapper/README.md)를 반환합니다. - -모든 자식 컴포넌트를 스텁합니다. - -올바른 [selector](selectors.md)를 사용하세요. - -**옵션없이 사용** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**Vue 옵션과 사용** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo, { - propsData: { - color: 'red' - } - }) - expect(wrapper.props().color).toBe('red') - }) -}) -``` - -**DOM에 붙이기** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo, { - attachToDocument: true - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**기본 값, 이름을 가지고 있는 슬롯** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import FooBar from './FooBar.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo, { - slots: { - default: [Bar, FooBar], - fooBar: FooBar, // 와 일치하는. - foo: '
' - } - }) - expect(wrapper.find('div')).toBe(true) - }) -}) -``` - -**글로벌 속성 스텁** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const $route = { path: 'http://www.example-path.com' } - const wrapper = shallow(Foo, { - mocks: { - $route - } - }) - expect(wrapper.vm.$route.path).toBe($route.path) - }) -}) -``` diff --git a/docs/kr/api/wrapper-array/README.md b/docs/kr/api/wrapper-array/README.md deleted file mode 100644 index 4c1c932bb..000000000 --- a/docs/kr/api/wrapper-array/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# WrapperArray - -`WrapperArray`는 [Wrappers](../wrapper/README.md)의 배열을 가진 객체이고, `Wrapper`를 테스트하는 메소드입니다. - -- **속성:** - -`length` `number`: `WrapperArray`가 가진 `Wrappers`의 개수입니다. - - - **메소드:** - -문서의 WrapperArray 섹션에 있는 메소드의 자세한 목록이 있습니다. diff --git a/docs/kr/api/wrapper-array/at.md b/docs/kr/api/wrapper-array/at.md deleted file mode 100644 index c0cbbdcd8..000000000 --- a/docs/kr/api/wrapper-array/at.md +++ /dev/null @@ -1,20 +0,0 @@ -# at(index) - -입력한 `index` 순서(번호)에 해당하는 `Wrapper`를 반환합니다. 0부터 시작합니다. (첫번째 아이템의 인덱스는 0입니다.). - -- **전달인자:** - - `{number} index` - -- **반환값:** `{Wrapper}` - -- **예제:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = shallow(Foo) -const divArray = wrapper.findAll('div') -const secondDiv = divArray.at(1) -expect(secondDiv.is('p')).toBe(true) -``` diff --git a/docs/kr/api/wrapper-array/contains.md b/docs/kr/api/wrapper-array/contains.md deleted file mode 100644 index 9c915c415..000000000 --- a/docs/kr/api/wrapper-array/contains.md +++ /dev/null @@ -1,23 +0,0 @@ -# contains(selector) - -`WrapperArray`의 모든 래퍼가 셀렉터를 가지고 있는지 검증합니다. - -올바른 [selector](../selectors.md)를 사용하세요. - -- **전달인자:** - - `{string|Component} selector` - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = shallow(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.contains('p')).toBe(true) -expect(divArray.contains(Bar)).toBe(true) -``` diff --git a/docs/kr/api/wrapper-array/destroy.md b/docs/kr/api/wrapper-array/destroy.md deleted file mode 100644 index af713e4f2..000000000 --- a/docs/kr/api/wrapper-array/destroy.md +++ /dev/null @@ -1,17 +0,0 @@ -# destroy() - -`WrapperArray`의 Vue `Wrapper` 를 파괴합니다. - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.contains('p')).toBe(true) -divArray.destroy() -expect(divArray.contains('p')).toBe(false) - -``` diff --git a/docs/kr/api/wrapper-array/hasAttribute.md b/docs/kr/api/wrapper-array/hasAttribute.md deleted file mode 100644 index e57b0aff8..000000000 --- a/docs/kr/api/wrapper-array/hasAttribute.md +++ /dev/null @@ -1,20 +0,0 @@ -# hasAttribute(attribute, value) - -`WrapperArray`의 모든 `Wrapper` DOM 노드의 `attribute`와 일치하는 `value`를 가지는지 검증합니다. - -- **전달인자:** - - `{string} attribute` - - `{string} value` - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.hasAttribute('id', 'foo')).toBe(true) -``` diff --git a/docs/kr/api/wrapper-array/hasClass.md b/docs/kr/api/wrapper-array/hasClass.md deleted file mode 100644 index fafa3382c..000000000 --- a/docs/kr/api/wrapper-array/hasClass.md +++ /dev/null @@ -1,19 +0,0 @@ -# hasClass(className) - -`WrapperArray`의 모든 `Wrapper`의 DOM 노드가 `className` 이름의 클래스를 가지는지 검증합니다. - -- **전달인자:** - - `{string} className` - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.hasClass('bar')).toBe(true) -``` diff --git a/docs/kr/api/wrapper-array/hasProp.md b/docs/kr/api/wrapper-array/hasProp.md deleted file mode 100644 index c4bbb7aaf..000000000 --- a/docs/kr/api/wrapper-array/hasProp.md +++ /dev/null @@ -1,23 +0,0 @@ -# hasProp(prop, value) - -`WrapperArray`의 모든 `Wrapper`의 DOM 노드가 `prop`과 일치하는 `value`를 가지는지 검증합니다. - -**참고: Wrapper는 Vue 인스턴스를 반드시 가지고 있어야합니다.** - -- **전달인자:** - - `{string} prop` - - `{any} value` - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -expect(barArray.hasProp('bar', 10)).toBe(true) -``` diff --git a/docs/kr/api/wrapper-array/is.md b/docs/kr/api/wrapper-array/is.md deleted file mode 100644 index f3f30997b..000000000 --- a/docs/kr/api/wrapper-array/is.md +++ /dev/null @@ -1,19 +0,0 @@ -# is(selector) - -`WrapperArray`의 모든 `Wrapper`의 DOM 노드 또는 `vm`이 [selector](../selectors.md)와 일치하는지 검증합니다. - -- **전달인자:** - - `{string|Component} selector` - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.find('div') -expect(divArray.is('div')).toBe(true) -``` diff --git a/docs/kr/api/wrapper-array/isEmpty.md b/docs/kr/api/wrapper-array/isEmpty.md deleted file mode 100644 index e92cb299a..000000000 --- a/docs/kr/api/wrapper-array/isEmpty.md +++ /dev/null @@ -1,16 +0,0 @@ -# isEmpty() - -`WrapperArray`의 모든 `Wrapper`가 자식 노드가 없는지 검증합니다. - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.isEmpty()).toBe(true) -``` diff --git a/docs/kr/api/wrapper-array/isVueInstance.md b/docs/kr/api/wrapper-array/isVueInstance.md deleted file mode 100644 index e9c063689..000000000 --- a/docs/kr/api/wrapper-array/isVueInstance.md +++ /dev/null @@ -1,17 +0,0 @@ -# isVueInstance() - -`WrapperArray`의 모든 `Wrapper`가 Vue 인스턴스인지 검증합니다. - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -expect(barArray.isVueInstance()).toBe(true) -``` diff --git a/docs/kr/api/wrapper-array/setComputed.md b/docs/kr/api/wrapper-array/setComputed.md deleted file mode 100644 index 863c14394..000000000 --- a/docs/kr/api/wrapper-array/setComputed.md +++ /dev/null @@ -1,26 +0,0 @@ - -# setComputed(computedObjects) - -`WrapperArray`의 모든 `Wrapper` `vm`의 계산된 속성을 갱신합니다. - -**참고: Wrapper는 Vue 인스턴스를 반드시 가지고 있어야합니다.** -**참고: 모든 Vue 인스턴스는 이미 setComputed로 계산된 속성이 설정되어있어야 합니다.** - -- **전달인자:** - - `{Object} computed properties` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) - -barArray.setComputed({ - computed1: 'new-computed1', - computed2: 'new-computed2' -}) -``` diff --git a/docs/kr/api/wrapper-array/setData.md b/docs/kr/api/wrapper-array/setData.md deleted file mode 100644 index 20fe46846..000000000 --- a/docs/kr/api/wrapper-array/setData.md +++ /dev/null @@ -1,21 +0,0 @@ -# setData(data) - -`WrapperArray`의 모든 `Wrapper` `vm`의 데이터를 갱신합니다. - -**참고: Wrapper는 Vue 인스턴스를 반드시 가지고 있어야합니다.** - -- **전달인자:** - - `{Object} data` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -barArray.setData({ foo: 'bar' }) -expect(barArray.at(0).vm.foo).toBe('bar') -``` diff --git a/docs/kr/api/wrapper-array/setMethods.md b/docs/kr/api/wrapper-array/setMethods.md deleted file mode 100644 index a48bfb9bb..000000000 --- a/docs/kr/api/wrapper-array/setMethods.md +++ /dev/null @@ -1,26 +0,0 @@ - -# setMethods(methods) - -`WrapperArray`의 모든 `Wrapper` `vm`의 메소드를 갱신합니다. - -**참고: Wrapper는 Vue 인스턴스를 반드시 가지고 있어야합니다.** - -- **전달인자:** - - `{Object} methods` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -const clickMethodStub = sinon.stub() - -barArray.setMethods({ clickMethod: clickMethodStub }) -barArray.at(0).trigger('click') -expect(clickMethodStub.called).toBe(true) -``` diff --git a/docs/kr/api/wrapper-array/setProps.md b/docs/kr/api/wrapper-array/setProps.md deleted file mode 100644 index 3d9090a43..000000000 --- a/docs/kr/api/wrapper-array/setProps.md +++ /dev/null @@ -1,21 +0,0 @@ -# setProps(props) - -`WrapperArray`의 모든 `Wrapper` `vm`의 `props`를 갱신합니다. - -**참고: Wrapper는 Vue 인스턴스를 반드시 가지고 있어야합니다.** - -- **전달인자:** - - `{Object} props` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -barArray.setProps({ foo: 'bar' }) -expect(barArray.at(0).vm.foo).toBe('bar') -``` diff --git a/docs/kr/api/wrapper-array/trigger.md b/docs/kr/api/wrapper-array/trigger.md deleted file mode 100644 index 4eca1e2af..000000000 --- a/docs/kr/api/wrapper-array/trigger.md +++ /dev/null @@ -1,25 +0,0 @@ -# trigger(eventName) - -`WrapperArray`의 모든 `Wrapper`의 이벤트를 트리거합니다. - -**참고: Wrapper는 Vue 인스턴스를 반드시 가지고 있어야합니다.** - -- **전달인자:** - - `{string} eventName` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' - -const clickHandler = sinon.stub() -const wrapper = mount(Foo, { - propsData: { clickHandler } -}) - -const divArray = wrapper.findAll('div') -divArray.trigger('click') -expect(clickHandler.called).toBe(true) -``` diff --git a/docs/kr/api/wrapper/README.md b/docs/kr/api/wrapper/README.md deleted file mode 100644 index f3bc93b2f..000000000 --- a/docs/kr/api/wrapper/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Wrapper - -vue-test-utils는 래퍼 기반 API입니다. - -`Wrapper`는 마운트 된 컴포넌트나 vnode(가상 DOM)를 포함하는 객체이며, 컴포넌트나 vnode를 테스트하는 메소드입니다. - -- **속성:** - -`vm` `Component`: Vue 인스턴스입니다. `wrapper.vm`을 이용해 모든 [vm의 인스턴스 메소드와 속성](https://vuejs.org/v2/api/#Instance-Properties)에 접근할 수 있습니다. Vue 컴포넌트 래퍼에만 있습니다. - -`element` `HTMLElement`: 래퍼의 루트 DOM 노드. - -`options` `Object`: `mount` 또는 `shallow`에 전달된 vue-test-utils 옵션을 포함하는 객체 - -`options.attachedToDom` `Boolean`: attachToDom이 `mount` 또는 `shallow`에 전달되었을 때 true - -- **메소드:** - -문서의 래퍼 섹션에 있는 메소드의 자세한 목록이 있습니다. diff --git a/docs/kr/api/wrapper/contains.md b/docs/kr/api/wrapper/contains.md deleted file mode 100644 index 61495b4fc..000000000 --- a/docs/kr/api/wrapper/contains.md +++ /dev/null @@ -1,22 +0,0 @@ -# contains(selector) - -`Wrapper` 컴포넌트에 엘리먼트나 컴포넌트에 매칭하는 [selector](../selectors.md)가 있는지 검증합니다. - -- **전달인자:** - - `{string|Component} selector` - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -expect(wrapper.contains('p')).toBe(true) -expect(wrapper.contains(Bar)).toBe(true) -``` - -- **함께 보기:** [selectors](../selectors.md) diff --git a/docs/kr/api/wrapper/destroy.md b/docs/kr/api/wrapper/destroy.md deleted file mode 100644 index 873a55df8..000000000 --- a/docs/kr/api/wrapper/destroy.md +++ /dev/null @@ -1,19 +0,0 @@ -# destroy() - -Vue 컴포넌트 인스턴스를 파괴합니다. - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' - -const spy = sinon.stub() -mount({ - render: null, - destroyed () { - spy() - } -}).destroy() -expect(spy.calledOnce).toBe(true) -``` diff --git a/docs/kr/api/wrapper/emitted.md b/docs/kr/api/wrapper/emitted.md deleted file mode 100644 index 92117e258..000000000 --- a/docs/kr/api/wrapper/emitted.md +++ /dev/null @@ -1,32 +0,0 @@ -# emitted() - -`Wrapper`의 `vm`에 의해 만들어진, 사용자 정의 이벤트를 포함한 객체를 반환합니다. - -- **반환값:** `{ [name: string]: Array> }` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' - -const wrapper = mount(Component) - -wrapper.vm.$emit('foo') -wrapper.vm.$emit('foo', 123) - -/* -wrapper.emitted() 는 아래의 객체를 반환합니다. -{ - foo: [[], [123]] -} -*/ - -// 실행된 event를 검증합니다. -expect(wrapper.emitted().foo).toBeTruthy() - -// 이벤트의 수를 검증합니다. -expect(wrapper.emitted().foo.length).toBe(2) - -// 이벤트의 페이로드를 검증합니다. -expect(wrapper.emitted().foo[1]).toEqual([123]) -``` diff --git a/docs/kr/api/wrapper/emittedByOrder.md b/docs/kr/api/wrapper/emittedByOrder.md deleted file mode 100644 index 304d204d4..000000000 --- a/docs/kr/api/wrapper/emittedByOrder.md +++ /dev/null @@ -1,27 +0,0 @@ -# emittedByOrder() - -`Wrapper`의 `vm`에 의해 만들어진, 사용자 정의 이벤트를 포함한 배열을 반환합니다. - -- **반환값:** `Array<{ name: string, args: Array }>` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' - -const wrapper = mount(Component) - -wrapper.vm.$emit('foo') -wrapper.vm.$emit('bar', 123) - -/* -wrapper.emittedByOrder()는 아래의 배열을 반환합니다. -[ - { name: 'foo', args: [] }, - { name: 'bar', args: [123] } -] -*/ - -// 이벤트 발행 순서를 검증합니다. -expect(wrapper.emittedByOrder().map(e => e.name)).toEqual(['foo', 'bar']) -``` diff --git a/docs/kr/api/wrapper/exists.md b/docs/kr/api/wrapper/exists.md deleted file mode 100644 index 527f15d15..000000000 --- a/docs/kr/api/wrapper/exists.md +++ /dev/null @@ -1,20 +0,0 @@ -# exists() - -`Wrapper` 또는 `WrapperArray`가 존재하는지 검증합니다. - -`Wrapper` 또는 `WrapperArray`가 비어있으면 false를 반환합니다. - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.exists()).toBe(true) -expect(wrapper.find('does-not-exist').exists()).toBe(false) -expect(wrapper.findAll('div').exists()).toBe(true) -expect(wrapper.findAll('does-not-exist').exists()).toBe(false) -``` diff --git a/docs/kr/api/wrapper/find.md b/docs/kr/api/wrapper/find.md deleted file mode 100644 index dd2cb309f..000000000 --- a/docs/kr/api/wrapper/find.md +++ /dev/null @@ -1,26 +0,0 @@ -# find(selector) - -입력한 셀렉터와 일치하는 첫번째 DOM 노드 또는 Vue 컴포넌트 [`Wrapper`](README.md)를 반환합니다. - -올바른 [selector](selectors.md)를 사용하세요. - -- **전달인자:** - - `{string|Component} selector` - -- **반환값:** `{Wrapper}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const div = wrapper.find('div') -expect(div.is('div')).toBe(true) -const bar = wrapper.find(Bar) -expect(bar.is(Bar)).toBe(true) -``` - -- **함께 보기:** [Wrapper](README.md) diff --git a/docs/kr/api/wrapper/findAll.md b/docs/kr/api/wrapper/findAll.md deleted file mode 100644 index 1548076e9..000000000 --- a/docs/kr/api/wrapper/findAll.md +++ /dev/null @@ -1,26 +0,0 @@ -# findAll(selector) - -[Wrappers](README.md)의 [`WrapperArray`](../wrapper-array/README.md)를 반환합니다. - -올바른 [selector](selectors.md)를 사용하세요. - -- **전달인자:** - - `{string|Component} selector` - -- **반환값:** `{WrapperArray}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const div = wrapper.findAll('div').at(0) -expect(div.is('div')).toBe(true) -const bar = wrapper.findAll(Bar).at(0) -expect(bar.is(Bar)).toBe(true) -``` - -- **함께 보기:** [Wrapper](README.md) diff --git a/docs/kr/api/wrapper/hasAttribute.md b/docs/kr/api/wrapper/hasAttribute.md deleted file mode 100644 index 92df34497..000000000 --- a/docs/kr/api/wrapper/hasAttribute.md +++ /dev/null @@ -1,35 +0,0 @@ -# hasAttribute(attribute, value) - -`Wrapper` DOM 노드가 속성과 일치하는 값을 가지고 있는지 검증합니다. - -`Wrapper` DOM 노드가 일치하는 속성을 가지고 있으면 `true`를 반환합니다. - -- **전달인자:** - - `{string} attribute` - - `{string} value` - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.hasAttribute('id', 'foo')).toBe(true) -``` - -- **다른 방법:** - -`Wrapper.element`를 이용해 속성을 가져와 값에 기반한 검증을 할 수 있습니다. - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.element.getAttribute('id')).toBe('foo') -``` - -이는 보다 좋은 에러 검증을 합니다. diff --git a/docs/kr/api/wrapper/hasClass.md b/docs/kr/api/wrapper/hasClass.md deleted file mode 100644 index efa216032..000000000 --- a/docs/kr/api/wrapper/hasClass.md +++ /dev/null @@ -1,20 +0,0 @@ -# hasClass(className) - -`Wrapper` DOM 노드가 `className`의 클래스를 가진지 검증합니다. - -`Wrapper` DOM 노드가 클래스를 가지고 있으면 `true`를 반환합니다. - -- **전달인자:** - - `{string} className` - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.hasClass('bar')).toBe(true) -``` diff --git a/docs/kr/api/wrapper/hasProp.md b/docs/kr/api/wrapper/hasProp.md deleted file mode 100644 index 6bb94715f..000000000 --- a/docs/kr/api/wrapper/hasProp.md +++ /dev/null @@ -1,23 +0,0 @@ -# hasProp(prop, value) - -`Wrapper`의 `vm`이 일치하는 `value`를 가진 `prop`을 검증합니다. - -`Wrapper`의 `vm`이 일치하는 `value`를 가진 `prop`이 있으면 `true`를 반환합니다. - -**참고: Wrapper는 Vue 인스턴스를 반드시 가지고 있어야합니다.** - -- **전달인자:** - - `{string} prop` - - `{any} value` - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.hasProp('bar', 10)).toBe(true) -``` diff --git a/docs/kr/api/wrapper/html.md b/docs/kr/api/wrapper/html.md deleted file mode 100644 index a50caa899..000000000 --- a/docs/kr/api/wrapper/html.md +++ /dev/null @@ -1,15 +0,0 @@ -# html() - -`Wrapper` DOM 노드의 HTML을 문자열로 반환합니다. - -- **반환값:** `{string}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.html()).toBe('

Foo

') -``` diff --git a/docs/kr/api/wrapper/is.md b/docs/kr/api/wrapper/is.md deleted file mode 100644 index f501fa897..000000000 --- a/docs/kr/api/wrapper/is.md +++ /dev/null @@ -1,18 +0,0 @@ -# is(selector) - -`Wrapper` DOM 노드 또는 `vm`이 [selector](../selectors.md)와 일치하는지 검증합니다. - -- **전달인자:** - - `{string|Component} selector` - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.is('div')).toBe(true) -``` diff --git a/docs/kr/api/wrapper/isEmpty.md b/docs/kr/api/wrapper/isEmpty.md deleted file mode 100644 index defb1f13b..000000000 --- a/docs/kr/api/wrapper/isEmpty.md +++ /dev/null @@ -1,15 +0,0 @@ -# isEmpty() - -`Wrapper`가 자식 노드가 없는지 검증합니다. - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.isEmpty()).toBe(true) -``` diff --git a/docs/kr/api/wrapper/isVueInstance.md b/docs/kr/api/wrapper/isVueInstance.md deleted file mode 100644 index ce07ad3bc..000000000 --- a/docs/kr/api/wrapper/isVueInstance.md +++ /dev/null @@ -1,15 +0,0 @@ -# isVueInstance() - -`Wrapper`가 Vue 인스턴스인지 검증합니다. - -- **반환값:** `{boolean}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.isVueInstance()).toBe(true) - ``` diff --git a/docs/kr/api/wrapper/name.md b/docs/kr/api/wrapper/name.md deleted file mode 100644 index 96c2963da..000000000 --- a/docs/kr/api/wrapper/name.md +++ /dev/null @@ -1,17 +0,0 @@ -# name() - -`Wrapper`가 Vue 인스턴스를 가지고 있으면 이름을 반환하고, `Wrapper`가 Vue 인스턴스를 포함하지 않으면 DOM 노드의 태그 이름을 반환합니다. - -- **반환값:** `{string}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.name()).toBe('Foo') -const p = wrapper.find('p') -expect(p.name()).toBe('p') -``` diff --git a/docs/kr/api/wrapper/setData.md b/docs/kr/api/wrapper/setData.md deleted file mode 100644 index 8c69c8d42..000000000 --- a/docs/kr/api/wrapper/setData.md +++ /dev/null @@ -1,19 +0,0 @@ -# setData(data) - -`Wrapper` `vm`의 데이터를 갱신합니다. - -**참고: Wrapper는 Vue 인스턴스를 반드시 가지고 있어야합니다.** - -- **전달인자:** - - `{Object} data` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -wrapper.setData({ foo: 'bar' }) -expect(wrapper.vm.foo).toBe('bar') -``` diff --git a/docs/kr/api/wrapper/setMethods.md b/docs/kr/api/wrapper/setMethods.md deleted file mode 100644 index 03adc9e0e..000000000 --- a/docs/kr/api/wrapper/setMethods.md +++ /dev/null @@ -1,23 +0,0 @@ -# setMethods(methods) - -`Wrapper` `vm`의 메소드를 갱신합니다. - -**참고: Wrapper는 Vue 인스턴스를 반드시 가지고 있어야합니다.** - -- **전달인자:** - - `{Object} methods` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const clickMethodStub = sinon.stub() - -wrapper.setMethods({ clickMethod: clickMethodStub }) -wrapper.find('button').trigger('click') -expect(clickMethodStub.called).toBe(true) -``` diff --git a/docs/kr/api/wrapper/setProps.md b/docs/kr/api/wrapper/setProps.md deleted file mode 100644 index 745509e75..000000000 --- a/docs/kr/api/wrapper/setProps.md +++ /dev/null @@ -1,46 +0,0 @@ -# setProps(props) - -- **전달인자:** - - `{Object} props` - -- **사용법:** - -`Wrapper` `vm` props를 갱신합니다. - -**참고: Wrapper는 Vue 인스턴스를 반드시 가지고 있어야합니다.** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -wrapper.setProps({ foo: 'bar' }) -expect(wrapper.vm.foo).toBe('bar') -``` - -전달받은 값으로 Vue 인스턴스를 초기화하는 `propsData` 객체를 전달할 수 있습니다. - -``` js -// Foo.vue -export default { - props: { - foo: { - type: String, - required: true - } - } -} -``` - -``` js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo, { - propsData: { - foo: 'bar' - } -}) - -expect(wrapper.vm.foo).toBe('bar') -``` diff --git a/docs/kr/api/wrapper/text.md b/docs/kr/api/wrapper/text.md deleted file mode 100644 index 51a886a6f..000000000 --- a/docs/kr/api/wrapper/text.md +++ /dev/null @@ -1,15 +0,0 @@ -# text() - -`Wrapper`가 가지고 있는 문자열을 반환합니다. - -- **반환값:** `{string}` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.text()).toBe('bar') -``` diff --git a/docs/kr/api/wrapper/trigger.md b/docs/kr/api/wrapper/trigger.md deleted file mode 100644 index 8e090392a..000000000 --- a/docs/kr/api/wrapper/trigger.md +++ /dev/null @@ -1,30 +0,0 @@ -# trigger(eventName) - -`Wrapper` DOM 노드의 이벤트를 트리거합니다. - -트리거는 선택적으로 `options` 객체를 가질 수 있습니다. `options` 객체의 속성이 이벤트에 추가됩니다. - -- **전달인자:** - - `{string} eventName` - - `{Object} options` - -- **예제:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo' - -const clickHandler = sinon.stub() -const wrapper = mount(Foo, { - propsData: { clickHandler } -}) - -wrapper.trigger('click') - -wrapper.trigger('click', { - button: 0 -}) - -expect(clickHandler.called).toBe(true) -``` diff --git a/docs/kr/guides/README.md b/docs/kr/guides/README.md deleted file mode 100644 index d7f0c991f..000000000 --- a/docs/kr/guides/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# 가이드 - -* [시작하기](./getting-started.md) -* [일반적인 팁](./common-tips.md) -* [마우스, 키 그리고 기타 DOM 이벤트](./dom-events.md) -* [테스트 러너 선택하기](./choosing-a-test-runner.md) -* [Jest 사용하기](./using-with-jest.md) -* [Jest로 싱글 파일 컴포넌트 테스트](./testing-SFCs-with-jest.md) -* [Mocha + webpack으로 싱글 파일 컴포넌트 테스트](./testing-SFCs-with-mocha-webpack.md) -* [Vue Router 사용하기](./using-with-vue-router.md) -* [Vuex 사용하기](./using-with-vuex.md) diff --git a/docs/kr/guides/choosing-a-test-runner.md b/docs/kr/guides/choosing-a-test-runner.md deleted file mode 100644 index 53a8b8471..000000000 --- a/docs/kr/guides/choosing-a-test-runner.md +++ /dev/null @@ -1,45 +0,0 @@ -# 테스트 러너 선택하기 - -테스트 러너는 테스트를 실행하는 프로그램입니다. - -JavaScript 에는 유명한 테스트 러너가 많이 있습니다. `vue-test-utils`는 모든 테스트 러너와 함께 사용할 수 있습니다. 이는 테스트 러너 종류와는 상관없습니다. - -테스트 러너를 선택할 때는 기능 세트, 성능 및 싱글 파일 컴포넌트, 사전 컴파일 지원 등을 지원하는지 등 몇 가지 사항을 고려해야 합니다. 기존 라이브러리들을 신중하게 비교한 결과, 다음 두 가지 테스트 러너를 권장합니다: - -- [Jest](https://facebook.github.io/jest/docs/en/getting-started.html#content)는 완벽한 기능을 갖춘 테스트 러너입니다. 최소한의 설정이 필요하며, 기본적으로 JSDOM을 갖추었고, 내장된 검증 도구를 제공하며, 커맨드 라인 사용성이 뛰어납니다. 그러나 테스트에서 싱글 파일 컴포넌트(SFC: single-file component)를 가져오려면 프리 프로세서(사전 처리 과정)가 필요합니다. 우리는 일반적인 싱글 파일 컴포넌트를 처리할 수 있도록 `vue-jest` 프리프로세서를 만들었습니다. 하지만 vue-loader와 기능적으로 100% 같지는 않습니다. - -- [mocha-webpack](https://github.com/zinserjan/mocha-webpack)는 webpack + Mocha에 대한 래퍼이지만 간소화된 인터페이스와 감시 모드를 제공합니다. 이 설정의 장점은 webpack + `vue-loader`를 통해 완전한 싱글 파일 컴포넌트 지원을 할 수 있다는 점입니다. 그러나 더 많은 설정이 필요합니다. - -## 브라우저 환경 - -`vue-test-utils`는 브라우저 환경에 의존합니다. 기술적으로 실제 브라우저에서 실행할 수 있으나 다른 플랫폼에서 실제 브라우저를 실행해야 하는 복잡함 때문에 권장하지 않습니다. 대신 [JSDOM](https://github.com/tmpvar/jsdom)을 사용해 가상 브라우저 환경에서 Node.js의 테스트를 실행하는 것이 좋습니다. - -Jest 테스트 러너는 JSDOM을 자동으로 설정합니다. 다른 테스트 러너의 경우 테스트 항목에 [jsdom-global](https://github.com/rstacruz/jsdom-global)을 사용하여 테스트용 JDOM을 수동으로 설정할 수 있습니다: - -``` bash -npm install --save-dev jsdom jsdom-global -``` ---- -``` js -// 테스트 셋업 / 시작점에서 -require('jsdom-global')() -``` - -## 싱글 파일 컴포넌트 테스트 - -싱글 파일 Vue 컴포넌트 (SFCs)는 노드 또는 브라우저에서 실행하기 전에 미리 컴파일해야합니다. 컴파일하는 두가지 방법을 권장합니다. Jest 프리프로세서를 사용하거나 직접 webpack을 이용하세요 - -`vue-jest` 프리프로세서의 경우 기본적인 SFC 기능을 지원하나, 현재 `vue-loader`만 지원하는 스타일 블럭이나 커스텀 블럭을 처리하지 않습니다. 이런 기능이나 다른 웹팩 특정 설정에 의존하는 경우 webpack + `vue-loader` 기반으로 설치해야합니다. - -아래 내용에 따라 다른 설정을 할 수 있습니다. - -- [Jest로 싱글 파일 컴포넌트 테스트](./testing-SFCs-with-jest.md) -- [Mocha + webpack로 싱글 파일 컴포넌트 테스트](./testing-SFCs-with-mocha-webpack.md) - -## 리소스 - -- [테스트 러너 퍼포먼스 비교](https://github.com/eddyerburgh/vue-unit-test-perf-comparison) -- [Jest 예제](https://github.com/vuejs/vue-test-utils-jest-example) -- [Mocha 예제](https://github.com/vuejs/vue-test-utils-mocha-webpack-example) -- [tape 예제](https://github.com/eddyerburgh/vue-test-utils-tape-example) -- [AVA 예제](https://github.com/eddyerburgh/vue-test-utils-ava-example) diff --git a/docs/kr/guides/common-tips.md b/docs/kr/guides/common-tips.md deleted file mode 100644 index 5205b7cc9..000000000 --- a/docs/kr/guides/common-tips.md +++ /dev/null @@ -1,133 +0,0 @@ -# 일반적인 팁 - -## 어떤것을 테스트해야 할까요 - -UI 컴포넌트의 경우, 내부 구현에 집중하다 보면 너무 많은 내부 구현을 살펴보아야 하기 때문에, 테스트 작성에 소홀하게 되어 나중에는 테스트가 어렵습니다. 그래서 코드 한 줄 한 줄을 모두 테스트하는 것을 추천하지 않습니다. - -대신, 컴포넌트 퍼블릭 인터페이스를 확인하는 테스트를 작성하는 것을 추천합니다. 그리고 내부를 블랙박스로 취급해야 합니다. 하나의 테스트 케이스는 컴포넌트에 전달된 일부 입력 (사용자 인터렉션 또는 props 변경)이 예상되는 대로 출력(렌더링 된 결과 또는 방출된 사용자 정의 이벤트)되는지 확인 해야합니다. - -예를 들어 버튼을 클릭할 때마다 카운터를 1씩 증가하는 `Counter` 컴포넌트의 경우, 해당 테스트 케이스가 클릭을 시뮬레이션하고, 렌더링 된 출력이 1씩 증가했음을 검증합니다. 이 테스트에서는 구현 방식은 생각하지 않고, 카운터의 값을 증가시키는 입력과 출력만 고려합니다. - -이 접근 방식의 장점은 컴포넌트의 퍼블릭 인터페이스가 동일하게 유지되는 한 컴포넌트 내부 구현이 어떻게 변경되더라도 테스트가 통과된다는 것입니다. - -이 주제는 [Matt O'Connell의 훌륭한 발표](http://slides.com/mattoconnell/deck#/)를 확인하세요 - -## 얕은(Shallow) 렌더링 - -유닛 테스트에서, 보통 컴포넌트를 독립된 단위로 격리시켜 간접적으로 자식 컴포넌트의 동작을 실행하는 것을 피합니다. - -이에 더하여, 많은 자식 컴포넌트를 가진 컴포넌트는 렌더링 된 트리 전체가 커질 수 있습니다. 반복적으로 모든 자식 컴포넌트를 렌더링하면 테스트 속도가 느려질 수 있습니다. - -`vue-test-utils`는 `shallow` 메소드를 이용해 자식 컴포넌트를 렌더링하지 않고 (스텁으로) 컴포넌트를 마운트할 수 있게 합니다. - -```js -import { shallow } from '@vue/test-utils' - -const wrapper = shallow(Component) // 마운트된 컴포넌트 인스턴트를 포함한 래퍼를 반환 -wrapper.vm // 마운트된 Vue 인스턴스 -``` - -## 방출된 이벤트 검증 - -마운트된 각 래퍼는 자동으로 Vue 인스턴스에 의해 생성된 모든 이벤트를 기록합니다. `wrapper.emitted()` 메소드를 사용해 기록된 이벤트를 검색할 수 있습니다. - -``` js -wrapper.vm.$emit('foo') -wrapper.vm.$emit('foo', 123) - -/* -wrapper.emitted() 는 다음 객체를 반환합니다. -{ - foo: [[], [123]] -} -*/ -``` - -그런 다음 위 데이터 기반으로 검증할 수 있습니다. - -``` js -// 방출된 이벤트 검증 -expect(wrapper.emitted().foo).toBeTruthy() - -// 이벤트 갯수 검증 -expect(wrapper.emitted().foo.length).toBe(2) - -// 이벤트 페이로드 검증 -expect(wrapper.emitted().foo[1]).toEqual([123]) -``` - -[wrapper.emittedByOrder()](../api/wrapper/emittedByOrder.md)를 호출하여 이벤트 배열을 방출될 순서대로 가져올 수 있습니다. - -## 컴포넌트 상태 조작 - -래퍼에서 `setData` 또는 `setProps` 메소드를 사용하여 컴포넌트 상태를 직접 조작할 수 있습니다. - -```js -wrapper.setData({ count: 10 }) - -wrapper.setProps({ foo: 'bar' }) -``` - -## Props 목킹 - -Vue에 내장된 `propsData` 옵션을 이용해 컴포넌트에 props에 전달할 수 있습니다. - -```js -import { mount } from '@vue/test-utils' - -mount(Component, { - propsData: { - aProp: 'some value' - } -}) -``` - -이미 마운트 된 컴포넌트의 props를 갱신하려면 `wrapper.setProps({})`을 이용합니다. - -*전체 옵션은 문서의 [마운트 옵션](../api/options.md)을 확인하세요* - -## 글로벌 플러그인과 믹스인 적용 - -일부 컴포넌트는 글로벌 플러그인 또는 믹스인에 의존한 기능이 있을 수 있습니다. 예를 들어 `vuex`와 `vue-router`가 있습니다. - -특정 앱의 컴포넌트에 대한 테스트를 작성하는 경우 동일한 글로벌 플러그인과 믹스인을 테스트 항목에 한번만 설정할 수 있습니다. 그러나 일부 앱에서 공유할 수 있는 일반적인 컴포넌트들을 테스트하는 경우에는 글로벌 `Vue` 생성자를 오염시키지 않고 격리시켜 컴포넌트를 테스트하는 것이 좋습니다. [createLocalVue](../api/createLocalVue.md) 메소드를 사용해 다음과 같이 할 수 있습니다. - -``` js -import { createLocalVue } from '@vue/test-utils' - -// 확장된 Vue 생성자를 만듭니다. -const localVue = createLocalVue() - -// 일반적으로 사용하듯 플러그인을 설치합니다. -localVue.use(MyPlugin) - -// 마운트 옵션에 localVue를 전달합니다. -mount(Component, { - localVue -}) -``` - -## 인젝션 목킹 - -간단하게 모의 속성을 주입하는 또 다른 방법은, `mocks` 옵션을 이용해 목킹하면 됩니다. - -```js -import { mount } from '@vue/test-utils' - -const $route = { - path: '/', - hash: '', - params: { id: '123' }, - query: { q: 'hello' } -} - -mount(Component, { - mocks: { - $route // 컴포넌트를 마운트하기 전에 목킹된 $route 객체를 Vue 인스턴스에 추가합니다. - } -}) -``` - -## 라우팅 다루기 - -정의를 이용한 라우팅은 전반적인 앱 구조와 여러 컴포넌트와 관련되므로 통합 또는 엔드-투-엔드 테스트에서 가장 잘 테스트 할 수 있습니다. `vue-router` 기능에 의존하는 개별 컴포넌트의 경우, 위의 방법을 사용하여 목킹할 수 있습니다. diff --git a/docs/kr/guides/dom-events.md b/docs/kr/guides/dom-events.md deleted file mode 100644 index c5b6ed91d..000000000 --- a/docs/kr/guides/dom-events.md +++ /dev/null @@ -1,194 +0,0 @@ -# 마우스, 키 그리고 기타 DOM 이벤트 테스팅 - -## 이벤트 트리거 - -`Wrapper`는 `trigger` 메소드를 노출합니다. 이 메소드로 DOM 이벤트를 트리거(발생하게)합니다. - -```js -const wrapper = mount(MyButton) - -wrapper.trigger('click') -``` - -`find`를 이용하면, 리턴값이 래퍼가 돌아온다는 것을 알고 있어야 합니다. `MyComponent`속에 버튼이 포함되어 있다고 가정하면 다음 코드가 버튼을 클릭을 발생시킵니다. - -```js -const wrapper = mount(MyComponent) - -wrapper.find('button').trigger('click') -``` - -## 옵션 - -트리거 메소드는 선택적으로 `options` 객체를 가질 수 있습니다. 이 `options` 객체의 속성이 이벤트에 추가됩니다. - -```js -const wrapper = mount(MyButton) - -wrapper.trigger('click', { button: 0 }) -``` - - -## 마우스 클릭 예제 - -**테스트할 컴포넌트** - -```html - - - -``` - -**테스트** - -```js -import YesNoComponent from '@/components/YesNoComponent' -import { mount } from '@vue/test-utils' -import sinon from 'sinon' // sinon.js - -describe('Click event', () => { - it('Click on yes button calls our method with argument "yes"', () => { - const spy = sinon.spy() - const wrapper = mount(YesNoComponent, { - propsData: { - callMe: spy - } - }) - wrapper.find('button.yes').trigger('click') - - spy.should.have.been.calledWith('yes') - }) -}) -``` - -## 키보드 예제 - -**테스트할 컴포넌트** - -이 컴포넌트는 다양한 키조작으로 증감을 처리합니다. - -```html - - - -``` - -**Test** - -```js -import QuantityComponent from '@/components/QuantityComponent' -import { mount } from '@vue/test-utils' - -describe('Key event tests', () => { - it('Quantity is zero by default', () => { - const wrapper = mount(QuantityComponent) - expect(wrapper.vm.quantity).toBe(0) - }) - - it('Cursor up sets quantity to 1', () => { - const wrapper = mount(QuantityComponent) - wrapper.trigger('keydown.up') - expect(wrapper.vm.quantity).toBe(1) - }) - - it('Cursor down reduce quantity by 1', () => { - const wrapper = mount(QuantityComponent) - wrapper.vm.quantity = 5 - wrapper.trigger('keydown.down') - expect(wrapper.vm.quantity).toBe(4) - }) - - it('Escape sets quantity to 0', () => { - const wrapper = mount(QuantityComponent) - wrapper.vm.quantity = 5 - wrapper.trigger('keydown.esc') - expect(wrapper.vm.quantity).toBe(0) - }) - - it('Magic character "a" sets quantity to 13', () => { - const wrapper = mount(QuantityComponent) - wrapper.trigger('keydown', { - which: 65 - }) - expect(wrapper.vm.quantity).toBe(13) - }) -}) - -``` - -**제한 사항** - -`keydown.up` 처럼, 점 뒤에 있는 키 이름은 `keyCode`로 반환됩니다. 현재 다음 이름들만 지원하고 있습니다. - -* enter, tab, delete, esc, space, up, down, left, right - -## 중요 - -vue-test-utils는 이벤트를 동기적으로 트리거 합니다. 따라서, `Vue.nextTick`은 필요하지 않습니다. diff --git a/docs/kr/guides/getting-started.md b/docs/kr/guides/getting-started.md deleted file mode 100644 index 954affb9b..000000000 --- a/docs/kr/guides/getting-started.md +++ /dev/null @@ -1,149 +0,0 @@ -# 시작하기 - -## 설치 - -`vue-test-utils`를 빠르게 맛보려면 제공하는 기본적인 설정이 되어있는 데모 저장소를 클론하세요. - - -``` bash -git clone https://github.com/vuejs/vue-test-utils-getting-started -cd vue-test-utils-getting-started -npm install -``` - -프로젝트에 포함된 간단한 예제 컴포넌트인 `counter.js`를 볼 수 있습니다. - -```js -// counter.js - -export default { - template: ` -
- {{ count }} - -
- `, - - data () { - return { - count: 0 - } - }, - - methods: { - increment () { - this.count++ - } - } -} -``` - -### 컴포넌트 마운팅 - -`vue-test-utils`는 Vue Component를 독립적으로 마운팅하고, 필요한 것들(props, injections, 사용자 이벤트)을 목킹(mocking)할 수 있고 결과(렌더링된 결과, 방출된 커스텀 이벤트)를 검증할 수 있습니다. - -마운트된 컴포넌트는 [Wrapper](../api/wrapper/) 내부에 반환됩니다. 래퍼는 컴포넌트 내부를 조회, 탐색, 조작 등을 할 수 있는 여러가지 유용한 메소드 지원합니다. - -래퍼를 만들기 위해 `mount` 메소드를 사용합니다. 이제, `test.js` 파일을 만드세요 - -```js -// test.js - -// mount() 메소드를 테스트 유틸에서 임포트합니다. -// 그리고 테스트할 컴포넌트를 가져옵니다. - -import { mount } from '@vue/test-utils' -import Counter from './counter' - -// 컴포넌트를 마운트하여 래퍼를 얻습니다. -const wrapper = mount(Counter) - -// 실제 Vue 인스턴스는 wrapper.vm로 접근할 수 있습니다. -const vm = wrapper.vm - -// 콘솔 로그를 사용해 래퍼의 내부를 살펴볼 수 있습니다. -// 이제 vue-test-utils와 함께 모험을 시작하세요 -console.log(wrapper) -``` - -### 컴포넌트에서 렌더링 된 HTML 출력 테스트 - -래퍼를 얻었으니 처음으로 할 일은 컴포넌트가 렌더링한 HTML이 예상하는 것과 같은지 살펴봅니다. - -```js -import { mount } from '@vue/test-utils' -import Counter from './counter' - -describe('Counter', () => { - // 컴포넌트를 마운트하여 래퍼를 얻습니다. - const wrapper = mount(Counter) - - it('renders the correct markup', () => { - expect(wrapper.html()).toContain('0') - }) - - // 엘리먼트 유무를 확인하는 것도 쉽습니다. - it('has a button', () => { - expect(wrapper.contains('button')).toBe(true) - }) -}) -``` - -`npm test`를 실행하면 테스트를 통과한 것을 볼 수 있습니다. - -### 사용자 조작 시뮬레이션 - -우리의 카운터는 사용자가 버튼을 누르면 증가해야합니다. 이 행동을 시뮬레이션 하려면, 가장 먼저 `wrapper.find()`를 사용 해 버튼의 위치를 찾아야 합니다. 그러면 **버튼 엘리먼트의 래퍼**를 반환합니다. `.trigger()`를 이용하여 버튼 클릭을 시뮬레이션 합니다. - -```js -it('button click should increment the count', () => { - expect(wrapper.vm.count).toBe(0) - const button = wrapper.find('button') - button.trigger('click') - expect(wrapper.vm.count).toBe(1) -}) -``` - -### `nextTick`은 어떻게 할까요? - -Vue는 DOM 업데이트를 미루고 비동기적으로 한번에 배치 처리하기 때문에, 여러번의 데이터 변이로 발생하는 불필요한 재 렌더링을 방지합니다. 실제로 상태가 변경된 후, Vue는 실제 DOM을 갱신을 미루고 기다리고 있습니다. 따라서 `Vue.nextTick`을 사용하지 않으면 처리 순서에 따라 업데이트 된 데이터를 바로 볼 수 없습니다. - -하지만 테스트를 쉽게 하기 위해 `vue-test-utils`는 모든 업데이트를 동기적으로 반영하므로, DOM 업데이트가 반영되는것을 기다리기 위해 `Vue.nextTick`을 사용할 필요가 없습니다. - -*주의: 비동기 콜백이나 Promise같은 작업을 위해, 명시적으로 이벤트 루프를 이용해야할 경우, 아직은 `nextTick`이 필요합니다.* - -만약 당신이 테스트 파일에서 `nextTick`를 사용하는 하는 경우, 프로미스 내부에서 발생하는 오류는 테스트 러너가 잡아낼 수 없다는 것을 알아둬야 합니다. - -이걸 피하려면, 두가지 접근방법이 있습니다. 테스트를 시작할 때, `done`콜백을 전역 에러 핸들러로 감싸거나, 인자가 없는 `nextTick`을 호출해서 프로미스로 리턴받을 수 있습니다.: - -```js -// 테스트에 잡히지 않는 경우. -it('잡아내지 못하고 지나갑니다.', (done) => { - Vue.nextTick(() => { - expect(true).toBe(false) - done() - }) -}) - -// 테스트가 되는 두가지 케이스. -it('done을 이용해서 에러를 잡을 것 입니다.', (done) => { - Vue.config.errorHandler = done - Vue.nextTick(() => { - expect(true).toBe(false) - done() - }) -}) - -it('프로미스를 이용해서 오류를 잡을 것 입니다.', () => { - return Vue.nextTick() - .then(function () { - expect(true).toBe(false) - }) -}) -``` - - -## 앞으로 해야할 일은 - -- [테스트 러너 선택]하고 `vue-test-utils`을 프로젝트에 추가하세요 -- [테스트를 작성하는데 필요한 기본적인 테크닉](./common-tips.md)을 살펴보세요 diff --git a/docs/kr/guides/testing-SFCs-with-jest.md b/docs/kr/guides/testing-SFCs-with-jest.md deleted file mode 100644 index 428f94640..000000000 --- a/docs/kr/guides/testing-SFCs-with-jest.md +++ /dev/null @@ -1,179 +0,0 @@ -# Jest로 싱글 파일 컴포넌트 테스트 - -> 이 설정의 예제는 [GitHub](https://github.com/vuejs/vue-test-utils-jest-example)에 있습니다. - -Jest는 페이스북이 개발한 테스트 러너입니다. 잘 갖춰진 유닛 테스팅 솔루션을 목표로 합니다. 자세한 내용은 Jest의 [공식 문서](https://facebook.github.io/jest/)를 살펴보세요. - -## Jest 설정 - -이미 webpack, vue-loader 및 Babel이 올바르게 설정했다고 가정합니다. `vue-cli`로 스캐폴딩된 `webpack-simple` 템플릿을 사용합니다. - -가장 먼저 할 일은 Jest와 `vue-test-utils`를 설치하는 것 입니다.: - -```bash -$ npm install --save-dev jest vue-test-utils -``` - -다음은 `package.json`에서 스크립트 하나를 추가합니다. - -```json -// package.json -{ - "scripts": { - "test": "jest" - } -} -``` - -## Jest로 싱글 파일 컴포넌트 처리 - -Jest에게 `*.vue` 파일을 처리하는 방법을 알려주기 위해, `vue-jest` 프리프로세서를 설치하고 설정해야합니다.: - -``` bash -npm install --save-dev vue-jest -``` - -다음으로 `jest` 블럭을 `package.json`에 추가합니다.: - -``` json -{ - // ... - "jest": { - "moduleFileExtensions": [ - "js", - "json", - // Jest가 *.vue 파일을 처리할 수 있도록 합니다. - "vue" - ], - "transform": { - // vue-jest로 *.vue 파일을 처리합니다. - ".*\\.(vue)$": "/node_modules/vue-jest" - }, - "mapCoverage": true - } -} -``` - -> **참고:** `vue-jest`는 현재 사용자 정의 블럭 및 스타일 로딩과 같은 `vue-loader`의 모든 기능을 지원하지는 않습니다. 또한, 코드 분할과 같은 일부 webpack 관련 기능은 지원하지 않습니다. 이를 사용하려면, [Mocha + webpack로 싱글 파일 컴포넌트 테스트](./testing-SFCs-with-mocha-webpack.md)를 읽어보세요. - -## webpack 알리아스 다루기 - -webpack 설정에서 `@`를 `/src`로 지정한 알리아스(별칭)를 사용하는 경우, Jest가 알 수 있도록 `moduleNameMapper` 옵션을 사용하여 맞추는 설정을 추가해야 합니다. - -``` json -{ - // ... - "jest": { - // ... - // @를 src로 매핑합니다. - "moduleNameMapper": { - "^@/(.*)$": "/src/$1" - } - } -} -``` - -## Jest를 위한 Babel 설정 - -Node의 최신 버전이 이미 대부분의 ES2015 기능을 지원하지만 테스트에서 ES 모듈 문법 및 stage-x 기능을 사용하길 원할 수 있습니다. 이를 위해 `babel-jest`를 설치해야합니다.: - -``` bash -npm install --save-dev babel-jest -``` - -다음으로 Jest에게 `babel-jest`로 JavaScript 테스트 파일을 처리하도록 `package.json`에 `jest.transform` 아래에 엔트리를 추가하여 알려줄 필요가 있습니다.: - -``` json -{ - // ... - "jest": { - // ... - "transform": { - // ... -      // babel-jest로 js를 처리한다. -      "^.+\\.js$": "/node_modules/babel-jest" - }, - // ... - } -} -``` - -> 기본적으로 `babel-jest`는 설치 되어있는 한 자동으로 설정됩니다. 그러나 앞서 `*.vue` 파일에 대한 변환을 명시적으로 추가했으므로 이제 `babel-jest`도 명시적으로 구성해야 합니다. - -webpack에서 `babel-preset-env`를 사용한다고 가정하면, webpack은 이미 ES 모듈을 처리하는 방법을 알고 있기 때문에 Babel 설정은 ES 모듈 트랜스파일을 비활성화합니다. 그러나 Jest 테스트는 Node에서 직접 실행되기 때문에, 테스트를 위해 이것을 활성해야 합니다. - -또한 `babel-preset-env`에 현재 사용하고 있는 Node 버전을 알려줄 수도 있습니다. 이렇게 하면 불필요한 기능을 건너뛰고 테스트가 더 빨리 시작됩니다. - -이 옵션을 테스트에만 적용하려면, `env.test` (`babel-jest`를 통해 자동으로 선택)를 아래 설정에 넣으세요. - -`.babelrc` 예제: - -``` json -{ - "presets": [ - ["env", { "modules": false }] - ], - "env": { - "test": { - "presets": [ - ["env", { "targets": { "node": "current" }}] - ] - } - } -} -``` - -### 스냅샷 테스트 - -[`vue-server-renderer`](https://github.com/vuejs/vue/tree/dev/packages/vue-server-renderer)를 사용해 컴포넌트를 문자열로 렌더링하여 [Jest 스냅샷 테스트](https://facebook.github.io/jest/docs/en/snapshot-testing.html)를 위한 스냅샷으로 제공할 수 있습니다. - -`vue-server-renderer`의 렌더링 결과 만으로는 몇개의 SSR 특정 속성을 포함하여 공백 같은 문자열을 무시하므로, diff 부분을 찾아내기가 좀 어렵습니다. 사용자 정의 시리얼라저(custom serializer)를 사용해, 저장된 스냅샷을 개선할 수 있습니다.: - -``` bash -npm install --save-dev jest-serializer-vue -``` - -`package.json` 설정: - -``` json -{ - // ... - "jest": { - // ... - // 스냅샷을 위한 시리얼라이저 - "snapshotSerializers": [ - "/node_modules/jest-serializer-vue" - ] - } -} -``` - -### 테스트 파일 배치 - -기본적으로 Jest는 전체 프로젝트에서 `.spec.js` 또는 `.test.js` 확장자를 갖는 모든 파일을 재귀적으로 선택합니다. 이것이 상황에 맞지 않으면 `package.json` 파일의 config 섹션에서 [testRegex를 변경할 수 있습니다](https://facebook.github.io/jest/docs/en/configuration.html#testregex-string). - - -Jest는 테스트중인 코드 바로 다음에 `__tests__` 디렉터리를 만들 것을 권장 하지만, 테스트 결과를 적절히 마음대로 구조화할 수 있습니다. Jest는 스냅샷 테스트를 수행하는 파일 옆에 `__snapshots__` 디렉터리를 만듭니다. - -### 스펙 예제 - -Jasmine에 익숙하면 Jest의 [assertion API](https://facebook.github.io/jest/docs/en/expect.html#content)를 사용해 편하게 사용할 수 있습니다. - -```js -import { mount } from '@vue/test-utils' -import Component from './component' - -describe('Component', () => { - test('is a Vue instance', () => { - const wrapper = mount(Component) - expect(wrapper.isVueInstance()).toBeTruthy() - }) -}) -``` - -### 리소스 - -- [위 설정의 예제](https://github.com/vuejs/vue-test-utils-jest-example) -- [Vue Conf 2017의 예제 및 슬라이드](https://github.com/codebryo/vue-testing-with-jest-conf17) -- [Jest](https://facebook.github.io/jest/) -- [Babel preset env](https://github.com/babel/babel-preset-env) diff --git a/docs/kr/guides/testing-SFCs-with-mocha-webpack.md b/docs/kr/guides/testing-SFCs-with-mocha-webpack.md deleted file mode 100644 index a519b142c..000000000 --- a/docs/kr/guides/testing-SFCs-with-mocha-webpack.md +++ /dev/null @@ -1,180 +0,0 @@ -# Mocha + webpack로 싱글 파일 컴포넌트 테스트 - -> 이 설정의 예제는 [GitHub](https://github.com/vuejs/vue-test-utils-mocha-webpack-example)에 있습니다. - -싱글 파일 컴포넌트를 테스트하기 위한 또 다른 전략은 webpack을 통해 모든 테스트를 컴파일한 다음 테스트 러너에서 실행하는 것 입니다. 이 접근 방식의 장점은 모든 webpack 및 `vue-loader` 기능을 완벽히 지원하므로 소스코드를 테스트에 타협하지 않아도 된다는 점 입니다. - -기술적으로 테스트 러너를 사용해 수동으로 연결 할 수 있으나, 특정 작업에 매우 유용한 [`mocha-webpack`](https://github.com/zinserjan/mocha-webpack)이 있습니다. - -## `mocha-webpack` 설정 - -이미 webpack, vue-loader 및 Babel이 올바르게 구성되어 있는 것으로 시작한다고 가정합니다. `vue-cli`에 의해 스캐폴딩된 `webpack-simple`템플릿을 사용합니다. - -가장 먼저 할 일은 테스트 종속성을 설치하는 것 입니다.: - -``` bash -npm install --save-dev @vue/test-utils mocha mocha-webpack -``` - -다음은 `package.json`에서 스크립트 하나를 추가합니다.: - -```json -// package.json -{ - "scripts": { - "test": "mocha-webpack --webpack-config webpack.config.js --require test/setup.js test/**/*.spec.js" - } -} -``` - -몇가지 참고해야 할 주의사항이 있습니다.: - -- `--webpack-config` 플래그는 테스트에 사용할 webpack 설정을 지정합니다. 대부분의 경우 이 설정은 실제 프로젝트에 사용하는 설정과 동일하지만, 작은 수정을 하려합니다. 나중에 이것을 다룰 것입니다. - -- `--require` 플래그는 테스트 전에 `test/setup.js`가 실행되도록 합니다. 테스트가 실행될 글로벌 환경을 설정할 수 있습니다. - -- 마지막 전달 인자는 모든 테스트 파일의 집합(glob) 입니다. - -### 추가 webpack 설정 - -#### NPM 의존성 외부화 - -우리는 테스트를 하면서 다양한 NPM 의존성을 가져오게 되는 경우가 많이 있습니다. - 이 모듈 중 일부는 브라우저 사용을 염두하고 작성되어 있는 것 도 있기에, 단순하게 webpack으로 패키지 하기엔 적합하지 않습니다. 또 다른 고려사항으로는 의존성을 외부화 하게 되면, 테스트 시작 속도를 크게 향상시킬 수 있습니다. `webpack-node-externals`을 사용하여 모든 NPM 의존성을 외부화할 수 있습니다.: - -```js -// webpack.config.js -const nodeExternals = require('webpack-node-externals') - -module.exports = { - // ... - externals: [nodeExternals()] -} -``` - -#### 소스맵 - -소스맵은 `mocha-webpack`에 의해서 포착 될 수 있게 하기 위해, in-line화 할 필요가 있습니다. 권장 설정은 다음과 같습니다.: - -``` js -module.exports = { - // ... - devtool: 'inline-cheap-module-source-map' -} -``` - -IDE를 통해 디버깅하는 경우, 다음을 추가하는 것이 좋습니다.: - -``` js -module.exports = { - // ... - output: { - // ... - // 소스맵에 절대 경로 사용 (IDE를 통한 디버깅에서 중요함) - devtoolModuleFilenameTemplate: '[absolute-resource-path]', - devtoolFallbackModuleFilenameTemplate: '[absolute-resource-path]?[hash]' - } -} -``` - -### 브라우저 환경 설정 - -`vue-test-utils`를 실행하려면, 브라우저 환경이 필요합니다. Node.js에서 `jsdom-global`를 이용해 시뮬레이션합니다.: - -```bash -npm install --save-dev jsdom jsdom-global -``` - -`test/setup.js`에 추가합니다.: - -``` js -require('jsdom-global')() -``` - -이는 `vue-test-utils`가 올바르게 동작할 수 있도록 브라우저 환경을 노드에 추가합니다. - -### 검증(Assertion) 라이브러리 선택 - -[Chai](http://chaijs.com/)는 Mocha와 함께 사용하는 인기있는 검증 라이브러리입니다. 스파이와 스텁을 만드는 방법에 대해 [Sinon](http://sinonjs.org/)에서 확인하세요. - -대안으로 Jest의 일부인 `expect`를 사용할 수 있으며, Jest 문서에서 [정확히 같은 API](http://facebook.github.io/jest/docs/en/expect.html#content)를 노출합니다. - -여기서 `expect`를 사용하여 글로벌로 사용할 수 있도록 만들어, 모든 테스트에서 임포트할 필요는 없습니다.: - -``` bash -npm install --save-dev expect -``` - -`test/setup.js`입니다. - -``` js -require('jsdom-global')() - -global.expect = require('expect') -``` - -### 테스트를 위한 Babel 최적화 - -JavaScript를 처리하기 위해 `babel-loader`를 사용하고 있습니다. 앱에서 Babel을 쓰시는 경우, `.babelrc` 파일이 이미 구성 되어 있을 것입니다. 만약 당신이 별도로 구성하지 않는다면, `babel-loader`는 자동으로 같은 설정 파일을 가져오게 됩니다. - -주의 해야 할 한가지는, 이미 ES2015 기능을 대부분 지원하는 Node 6+를 사용하는 경우에 별도의 Babel [env 옵션](https://babeljs.io/docs/usage/babelrc/#env-option)을 설정할 수 있습니다. (예: stage-2 또는 미구현 된 flow 구문을 사용할 수 있도록 지원 등) - -### 테스트 추가 - -`src`에 `Counter.vue` 파일을 만듭니다.: - -``` html - - - -``` - -다음 `test/Counter.spec.js` 파일을 만들고 아래 내용으로 테스트를 작성하세요.: - -```js -import { shallow } from '@vue/test-utils' -import Counter from '../src/Counter.vue' - -describe('Counter.vue', () => { - it('increments count when button is clicked', () => { - const wrapper = shallow(Counter) - wrapper.find('button').trigger('click') - expect(wrapper.find('div').text()).toMatch('1') - }) -}) -``` - -이제 테스트를 할 수 있습니다.: - -``` -npm run unit -``` - -테스트가 실행됩니다! - -### 리소스 - -- [위 설정의 예제](https://github.com/vuejs/vue-test-utils-mocha-webpack-example) -- [Mocha](https://mochajs.org/) -- [mocha-webpack](http://zinserjan.github.io/mocha-webpack/) -- [Chai](http://chaijs.com/) -- [Sinon](http://sinonjs.org/) -- [jest/expect](http://facebook.github.io/jest/docs/en/expect.html#content) diff --git a/docs/kr/guides/using-with-vue-router.md b/docs/kr/guides/using-with-vue-router.md deleted file mode 100644 index 11807110f..000000000 --- a/docs/kr/guides/using-with-vue-router.md +++ /dev/null @@ -1,72 +0,0 @@ -# Vue Router 사용하기 - -## 테스트에 Vue Router 설치 - -테스트 할때 Vue 기반 생성자에 Vue Router를 설치하면 안됩니다. Vue Router를 설치하면 Vue prototype에 읽기 전용 속성으로 `$route`, `$router`가 추가됩니다. - -이를 피하기 위해, localVue를 만들고 여기에 Vue Router를 설치합니다. - -```js -import VueRouter from 'vue-router' -const localVue = createLocalVue() -localVue.use(VueRouter) -const router = new VueRouter() - -shallow(Component, { - localVue, - router -}) -``` - -## `router-link` 또는`router-view`를 사용하는 테스트 컴포넌트 - -Vue Router를 설치하면 `router-link`와 `router-view` 컴포넌트가 등록됩니다. 즉, 임포트할 필요 없이 앱 어디서나 사용할 수 있습니다. - -테스트를 실행할 때 컴포넌트에서 vue-router 관련 컴포넌트를 사용할 수 있도록 해야합니다. 이 방법에는 두가지가 있습니다. - -### 스텁 사용하기 - -```js -shallow(Component, { - stubs: ['router-link', 'router-view'] -}) -``` - -### localVue에 Vue Router 설치 - -```js -import VueRouter from 'vue-router' -const localVue = createLocalVue() - -localVue.use(VueRouter) - -shallow(Component, { - localVue -}) -``` - -## `$route`와 `$router` 목킹 - -때로는 컴포넌트가 `$route`와 `$router` 객체의 매개변수로 무언가를 수행하고 있는지 테스트를 할 필요가 있습니다. 이를 위해 사용자 정의 목(mocks-가짜데이터)을 Vue 인스턴스에 전달해야합니다. - -```js -const $route = { - path: '/some/path' -} - -const wrapper = shallow(Component, { - mocks: { - $route - } -}) - -wrapper.vm.$router // /some/path -``` - -## 공통적으로 확인 할 주의사항 - -Vue Router를 설치하면 Vue prototype에 읽기 전용 속성으로 `$route`, `$router`가 추가됩니다. - -이는 `$route` 또는 `$router`를 목킹하려고 시도하는 모든 테스트가 실패하는 것을 의미합니다. - -이를 피하려면, 테스트를 실행하는 동안에는 Vue Router를 설치하지 마십시오. diff --git a/docs/kr/guides/using-with-vuex.md b/docs/kr/guides/using-with-vuex.md deleted file mode 100644 index f0ae5c610..000000000 --- a/docs/kr/guides/using-with-vuex.md +++ /dev/null @@ -1,265 +0,0 @@ -# Vuex 사용하기 - -이번에는 `vue-test-utils`와 함께, 컴포넌트에서 Vuex를 테스트하는 방법을 알아봅니다. - -## 액션 목킹하기 - -약간의 코드를 살펴보겠습니다. - -이 컴포넌트는 테스트가 필요합니다. Vuex의 액션을 호출하고 있습니다. - -``` html - - - -``` - -이 테스트의 목적을 위해서 액션(action)이 무엇인지, 또는 스토어(store)가 어떻게 구성 되어 있는지 신경 쓸 필요가 없습니다. 우리는 단지 액션이 필요할 때 호출되고 있으며, 기대한 값으로 호출된 것을 확인해야합니다. - -이 테스트에서 얕은(shallow) 스토어에 목킹된 스토어를 전달해야합니다. - -저장소를 베이스 Vue 생성자에 전달하는 대신 [localVue](../api/options.md#localvue)에 전달할 수 있습니다. localVue는 글로벌 Vue 생성자에 영향을 미치지 않고, 변경할 수 있는 범위가 지정된 Vue 생성자입니다. - -어떻게 구성되었는지 보겠습니다. - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import Actions from '../../../src/components/Actions' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('Actions.vue', () => { - let actions - let store - - beforeEach(() => { - actions = { - actionClick: jest.fn(), - actionInput: jest.fn() - } - store = new Vuex.Store({ - state: {}, - actions - }) - }) - - it('calls store action actionInput when input value is input and an input event is fired', () => { - const wrapper = shallow(Actions, { store, localVue }) - const input = wrapper.find('input') - input.element.value = 'input' - input.trigger('input') - expect(actions.actionInput).toHaveBeenCalled() - }) - - it('does not call store action actionInput when input value is not input and an input event is fired', () => { - const wrapper = shallow(Actions, { store, localVue }) - const input = wrapper.find('input') - input.element.value = 'not input' - input.trigger('input') - expect(actions.actionInput).not.toHaveBeenCalled() - }) - - it('calls store action actionClick when button is clicked', () => { - const wrapper = shallow(Actions, { store, localVue }) - wrapper.find('button').trigger('click') - expect(actions.actionClick).toHaveBeenCalled() - }) -}) -``` - -여기서 무슨일이 일어나고 있을까요? 첫째로 Vue에게 `Vue.use` 메소드로 Vuex를 사용하도록 지시합니다. 이는 `Vue.use`에 대한 래퍼일 뿐입니다. - -다음 가짜 값과 함께 `Vuex.store`를 호출하여 목킹 스토어를 만듭니다. 우리가 지금 신경써야 할 액션만 전달합니다. - -액션은 [jest 목킹 함수](https://facebook.github.io/jest/docs/en/mock-functions.html)입니다. 목킹 함수는 액션이 호출되었는지 아닌지를 검증하는 메소드를 제공합니다. - -그런 다음, 우리는 테스트에서 액션 스텁이 예상한 시점에 호출되었는지 검증할 수 있습니다. - -여기에서 이러한 스토어를 정의하는 방식이 조금 어색할 수 있습니다. - -`beforeEach`를 사용하여, 각 테스트 전에 깨끗한 스토어를 보장 하도록 합니다. `beforeEach`는 각 테스트 전에 호출되는 Mocha 훅입니다. 이 테스트에서는 스토어 변수에 값을 다시 지정합니다. 이렇게 하지 않으면, 목킹 함수를 자동으로 재설정해 주어야 합니다. 물론 테스트에서 상태(state)를 바꿀 수 있습니다만, 이 방법이 다음에 진행되는 테스트들에 영향을 주지 않는 방법입니다. - -테스트에서 가장 주의깊게 봐야할 부분은 **가짜 Vuex 스토어를 만든 다음, 이를 vue-test-utils**에 전달하는 것 입니다. - -이제 액션을 목킹할 수 있습니다. getters를 목킹해보겠습니다. - -## 게터 목킹하기 - - -``` html - - - -``` - -아주 간단한 컴포넌트입니다. 게터는 `clicks`와 `inputValue`의 결과를 렌더링합니다. 다시 말하지만, 우리는 단지 결과가 올바르게 렌더링 되는 것 외에 게터가 반환하는 것을 신경쓰지 않습니다. - -테스트를 봅니다. - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import Getters from '../../../src/components/Getters' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('Getters.vue', () => { - let getters - let store - - beforeEach(() => { - getters = { - clicks: () => 2, - inputValue: () => 'input' - } - - store = new Vuex.Store({ - getters - }) - }) - - it('Renders state.inputValue in first p tag', () => { - const wrapper = shallow(Getters, { store, localVue }) - const p = wrapper.find('p') - expect(p.text()).toBe(getters.inputValue()) - }) - - it('Renders state.clicks in second p tag', () => { - const wrapper = shallow(Getters, { store, localVue }) - const p = wrapper.findAll('p').at(1) - expect(p.text()).toBe(getters.clicks().toString()) - }) -}) -``` -이 테스트는 액션 테스트와 비슷합니다. 각 테스트 전에 가짜 스토어를 만들고 `shallow`를 호출 할 때 옵션을 넘겨주고, 목킹 게터에 의해 반환된 값이 렌더링 되는 것을 검증합니다. - -이는 훌륭하지만, getter가 멀쩡한 상태(state)를 리턴하고 있는지 확인 하려면 어떻게 해야할까요? - -## 모듈 목킹하기 - -[모듈](https://vuex.vuejs.org/en/modules.html)은 스토어를 관리 가능한 덩어리로 분리하는데 유용합니다. 또한 게터를 내보냅니다. 테스트에서 이 것을 사용할 수 있습니다. - -컴포넌트를 살펴봅니다. - -``` html - - - -``` - -하나의 액션과 게터를 포함하는 간단한 컴포넌트입니다. - -아래는 테스트입니다. - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import Modules from '../../../src/components/Modules' -import module from '../../../src/store/module' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('Modules.vue', () => { - let actions - let state - let store - - beforeEach(() => { - state = { - module: { - clicks: 2 - } - } - - actions = { - moduleActionClick: jest.fn() - } - - store = new Vuex.Store({ - state, - actions, - getters: module.getters - }) - }) - - it('calls store action moduleActionClick when button is clicked', () => { - const wrapper = shallow(Modules, { store, localVue }) - const button = wrapper.find('button') - button.trigger('click') - expect(actions.moduleActionClick).toHaveBeenCalled() - }) - - it('Renders state.inputValue in first p tag', () => { - const wrapper = shallow(Modules, { store, localVue }) - const p = wrapper.find('p') - expect(p.text()).toBe(state.module.clicks.toString()) - }) -}) -``` - -### 리소스 - -- [이 가이드의 예제](https://github.com/eddyerburgh/vue-test-utils-vuex-example) -- [localVue](../api/options.md#localvue) -- [createLocalVue](../api/createLocalVue.md) diff --git a/docs/pt-br/README.md b/docs/pt-br/README.md deleted file mode 100644 index b8fa08b23..000000000 --- a/docs/pt-br/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# vue-test-utils - -`vue-test-utils` é a biblioteca oficial de testes de unidade para o Vue.js. - -## Índice - -* [Guia](guides/README.md) - * [Iniciando](guides/getting-started.md) - * [Dicas comuns](guides/common-tips.md) - * [Mouse, Tecla e outros eventos do DOM](guides/dom-events.md) - * [Escolhendo um executador de testes](guides/choosing-a-test-runner.md) - * [Testando SFCs com Jest](guides/testing-SFCs-with-jest.md) - * [Testando SFCs com Mocha + webpack](guides/testing-SFCs-with-mocha-webpack.md) - * [Usando com o Vue Router](guides/using-with-vue-router.md) - * [Usando com o Vuex](guides/using-with-vuex.md) -* [API](api/README.md) - * [mount](api/mount.md) - * [shallow](api/shallow.md) - * [Opções de montagem](api/options.md) - - [context](api/options.md#context) - - [slots](api/options.md#slots) - - [stubs](api/options.md#stubs) - - [mocks](api/options.md#mocks) - - [localVue](api/options.md#localvue) - - [attachToDocument](api/options.md#attachtodocument) - - [attrs](api/options.md#attrs) - - [listeners](api/options.md#listeners) - * [Wrapper](api/wrapper/README.md) - * [contains](api/wrapper/contains.md) - * [emitted](api/wrapper/emitted.md) - * [emittedByOrder](api/wrapper/emittedByOrder.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper/destroy.md) - * [find](api/wrapper/find.md) - * [findAll](api/wrapper/findAll.md) - * [hasAttribute](api/wrapper/hasAttribute.md) - * [hasClass](api/wrapper/hasClass.md) - * [hasProp](api/wrapper/hasProp.md) - * [html](api/wrapper/html.md) - * [is](api/wrapper/is.md) - * [isEmpty](api/wrapper/isEmpty.md) - * [isVueInstance](api/wrapper/isVueInstance.md) - * [name](api/wrapper/name.md) - * [setComputed](api/wrapper/setComputed.md) - * [setData](api/wrapper/setData.md) - * [setMethods](api/wrapper/setMethods.md) - * [setProps](api/wrapper/setProps.md) - * [text](api/wrapper/text.md) - * [trigger](api/wrapper/trigger.md) - * [WrapperArray](api/wrapper-array/README.md) - * [at](api/wrapper-array/at.md) - * [contains](api/wrapper-array/contains.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper-array/destroy.md) - * [hasAttribute](api/wrapper-array/hasAttribute.md) - * [hasClass](api/wrapper-array/hasClass.md) - * [hasProp](api/wrapper-array/hasProp.md) - * [is](api/wrapper-array/is.md) - * [isEmpty](api/wrapper-array/isEmpty.md) - * [isVueInstance](api/wrapper-array/isVueInstance.md) - * [setComputed](api/wrapper-array/setComputed.md) - * [setData](api/wrapper-array/setData.md) - * [setMethods](api/wrapper-array/setMethods.md) - * [setProps](api/wrapper-array/setProps.md) - * [trigger](api/wrapper-array/trigger.md) - * [Componentes](api/components/README.md) - * [TransitionStub](api/components/TransitionStub.md) - * [TransitionGroupStub](api/components/TransitionGroupStub.md) - * [Seletores](api/selectors.md) - * [createLocalVue](api/createLocalVue.md) - * [config](api/config.md) diff --git a/docs/pt-br/SUMMARY.md b/docs/pt-br/SUMMARY.md deleted file mode 100644 index 0ba25dd21..000000000 --- a/docs/pt-br/SUMMARY.md +++ /dev/null @@ -1,66 +0,0 @@ -## Índice - -* [Guia](guides/README.md) - * [Iniciando](guides/getting-started.md) - * [Dicas comuns](guides/common-tips.md) - * [Mouse, Tecla e outros eventos do DOM](guides/dom-events.md) - * [Escolhendo um executador de testes](guides/choosing-a-test-runner.md) - * [Testando SFCs com Jest](guides/testing-SFCs-with-jest.md) - * [Testando SFCs com Mocha + webpack](guides/testing-SFCs-with-mocha-webpack.md) - * [Usando com o Vue Router](guides/using-with-vue-router.md) - * [Usando com o Vuex](guides/using-with-vuex.md) -* [API](api/README.md) - * [mount](api/mount.md) - * [shallow](api/shallow.md) - * [Opções de montagem](api/options.md) - - [context](api/options.md#context) - - [slots](api/options.md#slots) - - [stubs](api/options.md#stubs) - - [mocks](api/options.md#mocks) - - [localVue](api/options.md#localvue) - - [attachToDocument](api/options.md#attachtodocument) - - [attrs](api/options.md#attrs) - - [listeners](api/options.md#listeners) - * [Wrapper](api/wrapper/README.md) - * [contains](api/wrapper/contains.md) - * [emitted](api/wrapper/emitted.md) - * [emittedByOrder](api/wrapper/emittedByOrder.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper/destroy.md) - * [find](api/wrapper/find.md) - * [findAll](api/wrapper/findAll.md) - * [hasAttribute](api/wrapper/hasAttribute.md) - * [hasClass](api/wrapper/hasClass.md) - * [hasProp](api/wrapper/hasProp.md) - * [html](api/wrapper/html.md) - * [is](api/wrapper/is.md) - * [isEmpty](api/wrapper/isEmpty.md) - * [isVueInstance](api/wrapper/isVueInstance.md) - * [name](api/wrapper/name.md) - * [setData](api/wrapper/setData.md) - * [setMethods](api/wrapper/setMethods.md) - * [setProps](api/wrapper/setProps.md) - * [text](api/wrapper/text.md) - * [trigger](api/wrapper/trigger.md) - * [WrapperArray](api/wrapper-array/README.md) - * [at](api/wrapper-array/at.md) - * [contains](api/wrapper-array/contains.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper-array/destroy.md) - * [hasAttribute](api/wrapper-array/hasAttribute.md) - * [hasClass](api/wrapper-array/hasClass.md) - * [hasProp](api/wrapper-array/hasProp.md) - * [is](api/wrapper-array/is.md) - * [isEmpty](api/wrapper-array/isEmpty.md) - * [isVueInstance](api/wrapper-array/isVueInstance.md) - * [setComputed](api/wrapper-array/setComputed.md) - * [setData](api/wrapper-array/setData.md) - * [setMethods](api/wrapper-array/setMethods.md) - * [setProps](api/wrapper-array/setProps.md) - * [trigger](api/wrapper-array/trigger.md) - * [Componentes](api/components/README.md) - * [TransitionStub](api/components/TransitionStub.md) - * [TransitionGroupStub](api/components/TransitionGroupStub.md) - * [Seletores](api/selectors.md) - * [createLocalVue](api/createLocalVue.md) - * [config](api/config.md) diff --git a/docs/pt-br/api/README.md b/docs/pt-br/api/README.md deleted file mode 100644 index a49e9c3ef..000000000 --- a/docs/pt-br/api/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# API - -* [mount](./mount.md) -* [shallow](./shallow.md) -* [Opções de montagem](./options.md) - - [context](./options.md#context) - - [slots](./options.md#slots) - - [stubs](./options.md#stubs) - - [mocks](./options.md#mocks) - - [localVue](./options.md#localvue) - - [attachToDocument](./options.md#attachtodocument) - - [attrs](./options.md#attrs) - - [listeners](./options.md#listeners) -* [Wrapper](./wrapper/README.md) - * [contains](./wrapper/contains.md) - * [emitted](./wrapper/emitted.md) - * [emittedByOrder](./wrapper/emittedByOrder.md) - * [exists](./wrapper/exists.md) - * [destroy](./wrapper/destroy.md) - * [find](./wrapper/find.md) - * [findAll](./wrapper/findAll.md) - * [hasAttribute](./wrapper/hasAttribute.md) - * [hasClass](./wrapper/hasClass.md) - * [hasProp](./wrapper/hasProp.md) - * [html](./wrapper/html.md) - * [is](./wrapper/is.md) - * [isEmpty](./wrapper/isEmpty.md) - * [isVueInstance](./wrapper/isVueInstance.md) - * [name](./wrapper/name.md) - * [setComputed](./wrapper/setComputed.md) - * [setData](./wrapper/setData.md) - * [setMethods](./wrapper/setMethods.md) - * [setProps](./wrapper/setProps.md) - * [text](./wrapper/text.md) - * [trigger](./wrapper/trigger.md) -* [WrapperArray](./wrapper-array/README.md) - * [at](./wrapper-array/at.md) - * [contains](./wrapper-array/contains.md) - * [exists](./wrapper/exists.md) - * [destroy](./wrapper-array/destroy.md) - * [hasAttribute](./wrapper-array/hasAttribute.md) - * [hasClass](./wrapper-array/hasClass.md) - * [hasProp](./wrapper-array/hasProp.md) - * [is](./wrapper-array/is.md) - * [isEmpty](./wrapper-array/isEmpty.md) - * [isVueInstance](./wrapper-array/isVueInstance.md) - * [setComputed](./wrapper-array/setComputed.md) - * [setData](./wrapper-array/setData.md) - * [setMethods](./wrapper-array/setMethods.md) - * [setProps](./wrapper-array/setProps.md) - * [trigger](./wrapper-array/trigger.md) -* [components](./components/README.md) - * [TransitionStub](./components/TransitionStub.md) - * [TransitionGroupStub](./components/TransitionGroupStub.md) -* [createLocalVue](./createLocalVue.md) -* [Seletores](./selectors.md) -* [config](./config.md) diff --git a/docs/pt-br/api/components/README.md b/docs/pt-br/api/components/README.md deleted file mode 100644 index 9fe182248..000000000 --- a/docs/pt-br/api/components/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Componentes - -O vue-test-utils apresenta alguns componentes utilitários para que você possa esboçar componentes. - -O [TransitionStub](./TransitionStub.md) e o [TransitionGroupStub](./TransitionGroupStub.md) por padrão são usados para esboçar componentes de transições e grupo de transições. Mas você pode editar esses esboços editando as configurações do mesmo. diff --git a/docs/pt-br/api/components/TransitionGroupStub.md b/docs/pt-br/api/components/TransitionGroupStub.md deleted file mode 100644 index 0a0d94dbb..000000000 --- a/docs/pt-br/api/components/TransitionGroupStub.md +++ /dev/null @@ -1,31 +0,0 @@ -# TransitionGroupStub (Esboço de grupo de transições) - -É um componente para substituir o componente `transition-group`. Em vez de executar as transições do grupo de forma assíncrona, ele retorna os componentes filhos de forma síncrona. - -Por padrão é configurado para trocar todos os componentes `transitions-group` da sua aplicação. Para desativar o componente `transition-group`, passe `config.stubs['transition-group']` para false: - -```js -import VueTestUtils from '@vue/test-utils' - -VueTestUtils.config.stubs['transition-group'] = false -``` - -Para redefinir os grupos de transições no esboço, use: - -```js -import VueTestUtils, { TransitionGroupStub } from '@vue/test-utils' - -VueTestUtils.config.stubs['transition-group'] = TransitionGroupStub -``` - -Para configura-lo na montagem, use: - -```js -import { mount, TransitionGroupStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - 'transition-group': TransitionGroupStub - } -}) -``` diff --git a/docs/pt-br/api/components/TransitionStub.md b/docs/pt-br/api/components/TransitionStub.md deleted file mode 100644 index 84c557a03..000000000 --- a/docs/pt-br/api/components/TransitionStub.md +++ /dev/null @@ -1,31 +0,0 @@ -# TransitionStub (esboço de transição) - -É um componente para substituir o componente `transition`. Em vez de executar as transições de forma assíncrona, ele retorna o componente filho de forma síncrona. - -Por padrão é configurado para trocar todos os componentes `transitions` da sua aplicação. Para desativar o componente `transition`, passe `config.stubs.transition` para false: - -```js -import VueTestUtils from '@vue/test-utils' - -VueTestUtils.config.stubs.transition = false -``` - -Para redefini-lo como componente de transição, use: - -```js -import VueTestUtils, { TransitionStub } from '@vue/test-utils' - -VueTestUtils.config.stubs.transition = TransitionStub -``` - -Para configura-lo como um esboço nas opções de montagem, use: - -```js -import { mount, TransitionStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - transition: TransitionStub - } -}) -``` diff --git a/docs/pt-br/api/config.md b/docs/pt-br/api/config.md deleted file mode 100644 index 47642e5c7..000000000 --- a/docs/pt-br/api/config.md +++ /dev/null @@ -1,25 +0,0 @@ -# Configurações - -O vue-test-utils apresenta um objeto de configuração para que você possa definir as opções usadas no wrapper. - -## Opções de configurações do `vue-test-utils - -### Esboços - -- tipo: `Object` -- padrão: `{ - transition: TransitionStub, - 'transition-group': TransitionGroupStub -}` - -Esboços são usados em todos componentes. Eles são substituídos pelos esboços passados nas opções da montagem. - -Quando você passa os esboços como um Array de String nas opções de montagens, o `config.stubs` é convertido em um Array e os componentes são esboçados com um componente que retorna uma div. - -Exemplo: - -```js -import VueTestUtils from '@vue/test-utils' - -VueTestUtils.config.stubs['meu-componente'] = '
' -``` diff --git a/docs/pt-br/api/createLocalVue.md b/docs/pt-br/api/createLocalVue.md deleted file mode 100644 index 04386511b..000000000 --- a/docs/pt-br/api/createLocalVue.md +++ /dev/null @@ -1,29 +0,0 @@ -# createLocalVue() - -- **Retorna:** - - `{Component}` - -- **Uso:** - -O `createLocalVue` retorna uma classe do Vue para que você possa adicionar componentes, mixins e plugins sem poluir sua classe global do Vue. - -Usando com o `options.localVue` - -```js -import { createLocalVue, shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const localVue = createLocalVue() -const wrapper = shallow(Foo, { - localVue, - mocks: { foo: true } -}) - -expect(wrapper.vm.foo).toBe(true) - -const wrapperSemMock = shallow(Foo) - -expect(wrapperSemMock.vm.foo).toBe(false) -``` - -- **Veja também:** [Dicas comuns](../guides/common-tips.md#applying-global-plugins-and-mixins) diff --git a/docs/pt-br/api/mount.md b/docs/pt-br/api/mount.md deleted file mode 100644 index e2294c11f..000000000 --- a/docs/pt-br/api/mount.md +++ /dev/null @@ -1,132 +0,0 @@ -# mount(component {, options}]) - -- **Argumentos:** - - - `{Component} component` - - `{Object} options` - -- **Retorna:** `{Wrapper}` - -- **Opções:** - -Veja [opções](options.md) - -- **Uso:** - -Retorna um [`Wrapper`](wrapper/README.md) do primeiro elemento do DOM ou o componente Vue correspondente ao seletor. - -Use qualquer [seletor](selectors.md) válido. - -**Sem opções:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renderiza uma div', () => { - const wrapper = mount(Foo) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**Com opções do Vue:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('verifica valor padrão da cor', () => { - const wrapper = mount(Foo, { - propsData: { - cor: 'vermelha' - } - }) - expect(wrapper.props().cor).toBe('vermelha') - }) -}) -``` - -**Anexar ao DOM:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('adiciona anexado ao DOM', () => { - const wrapper = mount(Foo, { - attachToDocument: true - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**Com slots padrões ou nomeados:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import FooBar from './FooBar.vue' - -describe('Foo', () => { - it('registra slots padrões e nomeados', () => { - const wrapper = mount(Foo, { - slots: { - default: [Bar, FooBar], - fooBar: FooBar, // Corresponde a , - foo: '
' - } - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**Adicionando propriedades globais:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('adicionando mock global do $route', () => { - const $route = { path: 'http://www.meusite.com.br' } - const wrapper = mount(Foo, { - mocks: { - $route - } - }) - expect(wrapper.vm.$route.path).toBe($route.path) - }) -}) -``` - -**Esboçando componentes filhos:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import Faz from './Faz.vue' - -describe('Foo', () => { - it('verifica componentes filhos de Foo', () => { - const wrapper = mount(Foo, { - stub: { - Bar: '
, - foo: '
' - } -}) -expect(wrapper.find('div')).toBe(true) -``` - -### Esboços - -- tipo: `{ [name: String]: Component | Boolean } | Array` - -Esboça os componentes filhos. Pode ser um Array com os nomes dos componentes ou um objeto. - -Exemplo: - -```js -import Foo from './Foo.vue' - -mount(Component, { - stubs: ['componente-registrado'] -}) - -shallow(Component, { - stubs: { - // esboço com uma implementação específica - 'componente-registrado': Foo, - // criar um esboço padrão (simulado com mock) - 'outro componente': true - } -}) -``` - -### `mocks` - -- tipo: `Object` - -Adiciona uma propriedade adicional à instância. Ótimo para simular injeções globais. - -Exemplo: - -```js - -const $route = { path: 'http://www.meusite.com.br' } -const wrapper = shallow(Component, { - mocks: { - $route - } -}) -expect(wrapper.vm.$route.path).toBe($route.path) -``` - -### `localVue` - -- tipo: `Vue` - -Uma cópia local do Vue é criada pelo [createLocalVue](./createLocalVue.md) para usar quando for montar um componente. A instalação de plugins e outros nessa cópia previne que seu Vue original seja poluído. - -Exemplo: - -```js -import { createLocalVue, mount } from '@vue/test-utils' -import VueRouter from 'vue-router' -import Foo from './Foo.vue' - -const localVue = createLocalVue() -localVue.use(VueRouter) - -const routes = [ - { path: '/foo', component: Foo } -] - -const router = new VueRouter({ - routes -}) - -const wrapper = mount(Component, { - localVue, - router -}) -expect(wrapper.vm.$route).toBeInstanceOf(Object) -``` - -### `attachToDocument` - -- tipo: `Boolean` -- padrão: `false` - -O componente será anexado ao DOM quando configurado como `true`. - -### `attrs` - -- tipo: `Object` - -Define o objeto `$attrs` da instância do componente. - -### `listeners` - -- tipo: `Object` - -Define o objeto `$listeners` da instância do componente. diff --git a/docs/pt-br/api/selectors.md b/docs/pt-br/api/selectors.md deleted file mode 100644 index 59bba2a98..000000000 --- a/docs/pt-br/api/selectors.md +++ /dev/null @@ -1,42 +0,0 @@ -# Seletores - -Muitos métodos desse wrapper leva um seletor como argumento. Um seletor pode ser um seletor CSS ou um componente do Vue. - -## Seletores CSS - -O método `mount` controla e suporta qualquer seletor válido: - -- seletores de tag (div, foo, bar) -- seletores de classes (.foo, .bar) -- seletores de atributos ([foo], [foo="bar"]) -- seletores de ids (#foo, #bar) -- pseudo seletores (div:first-of-type) - -Você também pode usar qualquer combinação: - -- combinador de descendente direto (div > #bar > .foo) -- combinador de descendente geral (div #bar .foo) -- seletor de irmão adjacente (div + .foo) -- seletor geral de irmãos (div ~ .foo) - -## Componentes do Vue - -Os componentes do Vue também são seletores válidos. - -O vue-test-utils usa a propriedade `name` para buscar a instância na árvore de componentes do Vue. - -```js -// Foo.vue - -export default{ - name: 'FooComponente' -} -``` - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = shallow(Foo) -expect(wrapper.is(Foo)).toBe(true) -``` diff --git a/docs/pt-br/api/shallow.md b/docs/pt-br/api/shallow.md deleted file mode 100644 index 1624a5918..000000000 --- a/docs/pt-br/api/shallow.md +++ /dev/null @@ -1,118 +0,0 @@ -# shallow(component {, options}]) - -- **Argumentos:** - - - `{Component} component` - - `{Object} options` - - `{Boolean} attachToDocument` - - `{Object} context` - - `{Object} slots` - - `{Array|Component|String} default` - - `{Array|Component|String} named` - - `{Object} mocks` - - `{Object|Array} stubs` - - `{Object} children` - - `{Vue} localVue` - -- **Retorna:** `{Wrapper}` - -- **Opções:** - -Veja as [opçoes](./options.md) - -- **Uso:** - -Retorna um [`Wrapper`](wrapper/README.md) do primeiro elemento do DOM ou o componente Vue correspondente ao seletor. - -Esboça todos os componentes filhos. - -Use qualquer [seletor](selectors.md) válido. - -**Sem opções:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('Renderiza uma div', () => { - const wrapper = shallow(Foo) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**With Vue options:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo, { - propsData: { - color: 'red' - } - }) - expect(wrapper.props().color).toBe('red') - }) -}) -``` - -**Anexa ao DOM:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('adiciona anexado ao DOM', () => { - const wrapper = shallow(Foo, { - attachToDocument: true - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**Com slots padrões ou nomeados:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import FooBar from './FooBar.vue' - -describe('Foo', () => { - it('adiciona slots ao componente', () => { - const wrapper = shallow(Foo, { - slots: { - default: [Bar, FooBar], - fooBar: FooBar, // Corresponde a , - foo: '
' - } - }) - expect(wrapper.find('div')).toBe(true) - }) -}) -``` - -**Adicionando propriedades globais:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('adicionando mock global do $route', () => { - const $route = { path: 'http://www.meusite.com.br' } - const wrapper = shallow(Foo, { - mocks: { - $route - } - }) - expect(wrapper.vm.$route.path).toBe($route.path) - }) -}) -``` diff --git a/docs/pt-br/api/wrapper-array/README.md b/docs/pt-br/api/wrapper-array/README.md deleted file mode 100644 index eec9b4d17..000000000 --- a/docs/pt-br/api/wrapper-array/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# WrapperArray (Array de wrappers) - -Um Array de wrappers é um objeto que contem uma lista com [Wrappers](../wrapper/README.md), e os alguns métodos para testar esses wrappers. - -- **Propriedades:** - -`length` `number`: O número de wrappers contidos nesse Array. - -- **Métodos:** - -Nessa documentação você tem uma lista detalhada dos métodos apresentados na seção WrapperArray. diff --git a/docs/pt-br/api/wrapper-array/at.md b/docs/pt-br/api/wrapper-array/at.md deleted file mode 100644 index e73604f7e..000000000 --- a/docs/pt-br/api/wrapper-array/at.md +++ /dev/null @@ -1,21 +0,0 @@ -# at(indice) - -Retorna o wrapper correspondente ao `indice` passado. Use números para corresponder ao item do arra, por exemplo o `indice` 0 para o primeiro elemento. - -- **Argumentos:** - - `{number} indice` - -- **Retorna:** `{Wrapper}` - -- **Exemplo:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = shallow(Foo) -const divArray = wrapper.findAll('div') - -const segundaDiv = divArray.at(1) -expect(segundaDiv.is('p')).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper-array/contains.md b/docs/pt-br/api/wrapper-array/contains.md deleted file mode 100644 index 6d1ee9cbd..000000000 --- a/docs/pt-br/api/wrapper-array/contains.md +++ /dev/null @@ -1,24 +0,0 @@ -# contains(selector) - -Verifica se cada wrapper do Array contém correspondência do seletor informado. - -Use qualquer [seletor](../selectors.md) válido. - -- **Argumentos:** - - `{String|Component} selector` - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = shallow(Foo) -const divArray = wrapper.findAll('div') - -expect(divArray.contains('p')).toBe(true) -expect(divArray.contains(Bar)).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper-array/destroy.md b/docs/pt-br/api/wrapper-array/destroy.md deleted file mode 100644 index fe70870a1..000000000 --- a/docs/pt-br/api/wrapper-array/destroy.md +++ /dev/null @@ -1,18 +0,0 @@ -# destroy() - -Destroí a instância do Vue da cada um dos wrappers do Array. - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) - -const divArray = wrapper.findAll('div') -expect(divArray.contains('p')).toBe(true) -divArray.destroy() - -expect(divArray.contains('p')).toBe(false) -``` diff --git a/docs/pt-br/api/wrapper-array/hasAttribute.md b/docs/pt-br/api/wrapper-array/hasAttribute.md deleted file mode 100644 index 44777ef05..000000000 --- a/docs/pt-br/api/wrapper-array/hasAttribute.md +++ /dev/null @@ -1,21 +0,0 @@ -# hasAttribute(attribute, value) - -Verifica se algum wrapper do Array tem o `atributo` com `value` correspondente no elemento do DOM. - -- **Argumentos:** - - `{String} attribute` - - `{String} value` - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') - -expect(divArray.hasAttribute('id', 'foo')).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper-array/hasClass.md b/docs/pt-br/api/wrapper-array/hasClass.md deleted file mode 100644 index 94cc8bb0d..000000000 --- a/docs/pt-br/api/wrapper-array/hasClass.md +++ /dev/null @@ -1,20 +0,0 @@ -# hasClass(className) - -Verifica se algum wrapper do Array contém uma classe com o nome `className` no elemento do DOM. - -- **Argumentos:** - - `{String} className` - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') - -expect(divArray.hasClass('bar')).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper-array/hasProp.md b/docs/pt-br/api/wrapper-array/hasProp.md deleted file mode 100644 index 745e166ad..000000000 --- a/docs/pt-br/api/wrapper-array/hasProp.md +++ /dev/null @@ -1,24 +0,0 @@ -# hasProp(propriedade, value) - -Verifica se algum wrapper do Array possui a `propriedade` com o `value` no `vm`. - -**Nota: o wrapper deve ser uma intância do Vue.** - -- **Argumentos:** - - `{String} propriedade` - - `{any} value` - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) - -expect(barArray.hasProp('bar', 10)).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper-array/is.md b/docs/pt-br/api/wrapper-array/is.md deleted file mode 100644 index 5d38fc52a..000000000 --- a/docs/pt-br/api/wrapper-array/is.md +++ /dev/null @@ -1,20 +0,0 @@ -# is(selector) - -Verifica se algum wrapper do Array possui o [seletor](../selectors.md) no seu `vm`. - -- **Argumentos:** - - `{String|Component} selector` - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.find('div') - -expect(divArray.is('div')).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper-array/isEmpty.md b/docs/pt-br/api/wrapper-array/isEmpty.md deleted file mode 100644 index 49f10cf16..000000000 --- a/docs/pt-br/api/wrapper-array/isEmpty.md +++ /dev/null @@ -1,17 +0,0 @@ -# isEmpty() - -Verifica se algum wrapper do Array não tem um elemento filho. - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') - -expect(divArray.isEmpty()).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper-array/isVueInstance.md b/docs/pt-br/api/wrapper-array/isVueInstance.md deleted file mode 100644 index 13553ca1d..000000000 --- a/docs/pt-br/api/wrapper-array/isVueInstance.md +++ /dev/null @@ -1,18 +0,0 @@ -# isVueInstance() - -Verifica se algum wrapper do Array é uma instância do Vue. - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) - -expect(barArray.isVueInstance()).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper-array/setComputed.md b/docs/pt-br/api/wrapper-array/setComputed.md deleted file mode 100644 index e6341d987..000000000 --- a/docs/pt-br/api/wrapper-array/setComputed.md +++ /dev/null @@ -1,25 +0,0 @@ -# setComputed(computedProperties) - -Define as propriedades computadas e força a atualização de cada um dos wrappers no Array. - -**Nota: cada wrapper deve ser uma instância do Vue.** -**Nota2: cada instância de cada wrapper deve ter as propriedades computadas já declaradas, pois esse método apenas simular o seu valor.** - -- **Argumentos:** - - `{Object} computedPropertiess` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) - -barArray.setComputed({ - propriedade1: 'nova-propriedade1', - propriedade2: 'nova-propriedade2' -}) -``` diff --git a/docs/pt-br/api/wrapper-array/setData.md b/docs/pt-br/api/wrapper-array/setData.md deleted file mode 100644 index aa057ffce..000000000 --- a/docs/pt-br/api/wrapper-array/setData.md +++ /dev/null @@ -1,22 +0,0 @@ -# setData(data) - -Define os dados e força a atualização de cada wrapper presente no Array. - -**Nota: cada wrapper deve ser uma instância do Vue.** - -- **Argumentos:** - - `{Object} data` - -- **Exemplho:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) - -barArray.setData({ foo: 'bar' }) -expect(barArray.at(0).vm.foo).toBe('bar') -``` diff --git a/docs/pt-br/api/wrapper-array/setMethods.md b/docs/pt-br/api/wrapper-array/setMethods.md deleted file mode 100644 index 3f077f571..000000000 --- a/docs/pt-br/api/wrapper-array/setMethods.md +++ /dev/null @@ -1,25 +0,0 @@ -# setMethods(methods) - -Define os métodos do componente e força sua atualização para cada wrapper no Array. - -**Nota: cada wrapper deve ser uma instância do Vue.** - -- **Argumentos:** - - `{Object} methods` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -const mockClique = sinon.stub() - -barArray.setMethods({ methodoClique: mockClique }) -barArray.at(0).trigger('click') -expect(mockClique.called).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper-array/setProps.md b/docs/pt-br/api/wrapper-array/setProps.md deleted file mode 100644 index f3c2b4371..000000000 --- a/docs/pt-br/api/wrapper-array/setProps.md +++ /dev/null @@ -1,22 +0,0 @@ -# setProps(props) - -Define as `propriedades` do componente e força sua atualização para cada wrapper no Array. - -**Nota: cada wrapper deve ser uma instância do Vue.** - -- **Argumentos:** - - `{Object} propriedades` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) - -barArray.setProps({ foo: 'bar' }) -expect(barArray.at(0).vm.foo).toBe('bar') -``` diff --git a/docs/pt-br/api/wrapper-array/trigger.md b/docs/pt-br/api/wrapper-array/trigger.md deleted file mode 100644 index 506289c02..000000000 --- a/docs/pt-br/api/wrapper-array/trigger.md +++ /dev/null @@ -1,26 +0,0 @@ -# trigger(eventName) - -Aciona um evento no elemeto do DOM de cada wrapper no Array. - -**Nota: cada wrapper deve ser uma instância do Vue.** - -- **Argumentos:** - - `{String} eventName` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' - -const mockDoClique = sinon.stub() -const wrapper = mount(Foo, { - propsData: { mockDoClique } -}) - -const divArray = wrapper.findAll('div') -divArray.trigger('click') - -expect(mockDoClique.called).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper/README.md b/docs/pt-br/api/wrapper/README.md deleted file mode 100644 index b7eccd817..000000000 --- a/docs/pt-br/api/wrapper/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Wrapper - -vue-test-utils é uma API baseada em *wrapper*. - -Um `Wrapper` é um objeto que contém um componente montado ou um vnode e alguns métodos para testar esse item envelopado. - -- **Propriedades:** - -`vm` `Component`: é uma instância Vue. Você pode acessar todos os [métodos de instância e propriedades de um vm](https://vuejs.org/v2/api/#Instance-Properties) com o `wrapper.vm`. Ela só exite em wrappers de componentes Vue. - -`element` `HTMLElement`: elemento raiz do DOM do wrapper. - -`options` `Object`: Objeto que contém as opções do vue-test-utils para ser passado para o `mount` ou `shallow`. - -- **Métodos:** - -Exite uma lista detalhada de métodos na seção Wrapper dessa documentação. diff --git a/docs/pt-br/api/wrapper/contains.md b/docs/pt-br/api/wrapper/contains.md deleted file mode 100644 index 612e8364f..000000000 --- a/docs/pt-br/api/wrapper/contains.md +++ /dev/null @@ -1,22 +0,0 @@ -# contains(selector) - -Verifica se o wrapper contém um elemento ou componente com o [seletor](../selectors.md) informado. - -- **Argumentos:** - - `{String|Component} selector` - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -expect(wrapper.contains('p')).toBe(true) -expect(wrapper.contains(Bar)).toBe(true) -``` - -- **Veja também:** [seletores](../selectors.md) diff --git a/docs/pt-br/api/wrapper/destroy.md b/docs/pt-br/api/wrapper/destroy.md deleted file mode 100644 index 56572e6e6..000000000 --- a/docs/pt-br/api/wrapper/destroy.md +++ /dev/null @@ -1,21 +0,0 @@ -# destroy() - -Destrói a instância do componente Vue. - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' - -const spy = sinon.stub() - -mount({ - render: null, - destroyed () { - spy() - } -}).destroy() - -expect(spy.calledOnce).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper/emitted.md b/docs/pt-br/api/wrapper/emitted.md deleted file mode 100644 index 99fc30845..000000000 --- a/docs/pt-br/api/wrapper/emitted.md +++ /dev/null @@ -1,32 +0,0 @@ -# emitted() - -Retorna um objeto contendo os eventos cutomizados emitidos pelo `vm` do wrapper. - -- **Retorna:** `{ [name: String]: Array> }` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' - -const wrapper = mount(Componente) - -wrapper.vm.$emit('foo') -wrapper.vm.$emit('foo', 123) - -/* -wrapper.emitted() retorna o seguinte objeto: -{ - foo: [[], [123]] -} -*/ - -// Verifica se o evento foi emitido -expect(wrapper.emitted().foo).toBeTruthy() - -// Verifica aquantidade de emissões do evento -expect(wrapper.emitted().foo.length).toBe(2) - -// Verifica a carga do segundo evento foo emitido -expect(wrapper.emitted().foo[1]).toEqual([123]) -``` diff --git a/docs/pt-br/api/wrapper/emittedByOrder.md b/docs/pt-br/api/wrapper/emittedByOrder.md deleted file mode 100644 index e84909624..000000000 --- a/docs/pt-br/api/wrapper/emittedByOrder.md +++ /dev/null @@ -1,27 +0,0 @@ -# emittedByOrder() - -Retorna um Array contendo os eventos customizados emitidos pelo `vm` do wrapper. - -- **Retorna:** `Array<{ name: String, args: Array }>` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' - -const wrapper = mount(Component) - -wrapper.vm.$emit('foo') -wrapper.vm.$emit('bar', 123) - -/* -wrapper.emittedByOrder() retorna o seguinte Array: -[ - { name: 'foo', args: [] }, - { name: 'bar', args: [123] } -] -*/ - -// Verifica a ordem dos eventos chamados -expect(wrapper.emittedByOrder().map(e => e.name)).toEqual(['foo', 'bar']) -``` diff --git a/docs/pt-br/api/wrapper/exists.md b/docs/pt-br/api/wrapper/exists.md deleted file mode 100644 index 4657f2375..000000000 --- a/docs/pt-br/api/wrapper/exists.md +++ /dev/null @@ -1,21 +0,0 @@ -# exists() - -Verifica se o `Wrapper` ou o `WrapperArray` existe. - -Retorna `false` se chamado com um `Wrapper` ou `WrapperArray` vazio. - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) - -expect(wrapper.exists()).toBe(true) -expect(wrapper.find('nao-existe').exists()).toBe(false) -expect(wrapper.findAll('div').exists()).toBe(true) -expect(wrapper.findAll('nao-existe').exists()).toBe(false) -``` diff --git a/docs/pt-br/api/wrapper/find.md b/docs/pt-br/api/wrapper/find.md deleted file mode 100644 index cd6defc27..000000000 --- a/docs/pt-br/api/wrapper/find.md +++ /dev/null @@ -1,28 +0,0 @@ -# find(selector) - -Retorna um wrapper [`Wrapper`](README.md) com o primeiro elmento do DOM ou o componente Vue encontrado a partir do seletor - -Use qualquer [seletor](../selectors.md) válido. - -- **Argumentos:** - - `{String|Component} selector` - -- **Retorna:** `{Wrapper}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) - -const div = wrapper.find('div') -expect(div.is('div')).toBe(true) - -const bar = wrapper.find(Bar) -expect(bar.is(Bar)).toBe(true) -``` - -- **Veja também:** [Wrapper](README.md) diff --git a/docs/pt-br/api/wrapper/findAll.md b/docs/pt-br/api/wrapper/findAll.md deleted file mode 100644 index 963fb8385..000000000 --- a/docs/pt-br/api/wrapper/findAll.md +++ /dev/null @@ -1,28 +0,0 @@ -# findAll(selector) - -Retorna um [`WrapperArray`](../wrapper-array/README.md) de [Wrappers](README.md). - -Use qualquer [seletor](../selectors.md) válido. - -- **Argumentos:** - - `{String|Component} selector` - -- **Retorna:** `{WrapperArray}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) - -const div = wrapper.findAll('div').at(0) -expect(div.is('div')).toBe(true) - -const bar = wrapper.findAll(Bar).at(0) -expect(bar.is(Bar)).toBe(true) -``` - -- **Veja também:** [Wrapper](README.md) diff --git a/docs/pt-br/api/wrapper/hasAttribute.md b/docs/pt-br/api/wrapper/hasAttribute.md deleted file mode 100644 index d753d66fb..000000000 --- a/docs/pt-br/api/wrapper/hasAttribute.md +++ /dev/null @@ -1,36 +0,0 @@ -# hasAttribute(attribute, value) - -Verifica se o wrapper contém o atributo mencionado no seu elemento do DOM. - -Retorna `true` se o wrapper contém o atributo. - -- **Argumentos:** - - `{String} attribute` - - `{String} value` - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -// Exemplo
...
-const wrapper = mount(Foo) -expect(wrapper.hasAttribute('id', 'foo')).toBe(true) -``` - -- **Alternativa:** - -Você poderia obter o atributo do `Wrapper.element` para então verificar baseado no valor retornado: - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.element.getAttribute('id')).toBe('foo') -``` - -Isso faz com que o erro da asserção sejá mais informativo. diff --git a/docs/pt-br/api/wrapper/hasClass.md b/docs/pt-br/api/wrapper/hasClass.md deleted file mode 100644 index 4ab18d235..000000000 --- a/docs/pt-br/api/wrapper/hasClass.md +++ /dev/null @@ -1,20 +0,0 @@ -# hasClass(className) - -Verifica se o wrapper do elemento do DOM contém uma classe informada pelo `className`. - -Retorna `true` se o wrapper contém a classe. - -- **Argumentos:** - - `{String} className` - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.hasClass('bar')).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper/hasProp.md b/docs/pt-br/api/wrapper/hasProp.md deleted file mode 100644 index 958addc60..000000000 --- a/docs/pt-br/api/wrapper/hasProp.md +++ /dev/null @@ -1,23 +0,0 @@ -# hasProp(propriedade, value) - -Verifica se o `vm` do wrapper possui uma pripriedade com o valor definido. - -Retorna `true` se o `vm` do wrapper tem a `propriedade` com o `value` passado. - -**Nota: o wrapper deve conter uma instância do Vue.** - -- **Argumentos:** - - `{String} propriedade` - - `{any} value` - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.hasProp('bar', 10)).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper/html.md b/docs/pt-br/api/wrapper/html.md deleted file mode 100644 index 336d827d1..000000000 --- a/docs/pt-br/api/wrapper/html.md +++ /dev/null @@ -1,15 +0,0 @@ -# html() - -Retorna o HTML do elemento do wrapper como uma String. - -- **Retorna:** `{String}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.html()).toBe('

Foo

') -``` diff --git a/docs/pt-br/api/wrapper/is.md b/docs/pt-br/api/wrapper/is.md deleted file mode 100644 index 46ae1da3a..000000000 --- a/docs/pt-br/api/wrapper/is.md +++ /dev/null @@ -1,18 +0,0 @@ -# is(selector) - -Verifica se o `vm` do wrapper possui o [seletor](../selectors.md) informado. - -- **Argumentos:** - - `{String|Component} selector` - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.is('div')).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper/isEmpty.md b/docs/pt-br/api/wrapper/isEmpty.md deleted file mode 100644 index 61e804df1..000000000 --- a/docs/pt-br/api/wrapper/isEmpty.md +++ /dev/null @@ -1,15 +0,0 @@ -# isEmpty() - -Verifica se o wrapper não contem elementos filhos. - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.isEmpty()).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper/isVueInstance.md b/docs/pt-br/api/wrapper/isVueInstance.md deleted file mode 100644 index 9bdebe70d..000000000 --- a/docs/pt-br/api/wrapper/isVueInstance.md +++ /dev/null @@ -1,15 +0,0 @@ -# isVueInstance() - -Verifica se o wrapper é uma intância do Vue. - -- **Retorna:** `{Boolean}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.isVueInstance()).toBe(true) - ``` diff --git a/docs/pt-br/api/wrapper/name.md b/docs/pt-br/api/wrapper/name.md deleted file mode 100644 index 24ad5d1b8..000000000 --- a/docs/pt-br/api/wrapper/name.md +++ /dev/null @@ -1,17 +0,0 @@ -# name() - -Retorna o nome do componente se o wrapper for uma instância do Vue, ou então o nome da tag se o wrapper for um elemento do DOM e não for uma instância do Vue. - -- **Retorna:** `{String}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.name()).toBe('Foo') -const p = wrapper.find('p') -expect(p.name()).toBe('p') -``` diff --git a/docs/pt-br/api/wrapper/setData.md b/docs/pt-br/api/wrapper/setData.md deleted file mode 100644 index f9b22deb5..000000000 --- a/docs/pt-br/api/wrapper/setData.md +++ /dev/null @@ -1,19 +0,0 @@ -# setData(data) - -Define os dados do `vm` do wrapper e força a sua atualização. - -**Nota: o wrapper deve ser uma instância do Vue.** - -- **Argumentos:** - - `{Object} data` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -wrapper.setData({ foo: 'bar' }) -expect(wrapper.vm.foo).toBe('bar') -``` diff --git a/docs/pt-br/api/wrapper/setMethods.md b/docs/pt-br/api/wrapper/setMethods.md deleted file mode 100644 index c8ade1826..000000000 --- a/docs/pt-br/api/wrapper/setMethods.md +++ /dev/null @@ -1,23 +0,0 @@ -# setMethods(methods) - -Define os métodos do `vm` do wrapper e força sua atualização. - -**Nota: o wrapper deve ser uma instância do Vue.** - -- **Argumentos:** - - `{Object} methods` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const mockClique = sinon.stub() - -wrapper.setMethods({ metodoClique: mockClique }) -wrapper.find('button').trigger('click') -expect(mockClique.called).toBe(true) -``` diff --git a/docs/pt-br/api/wrapper/setProps.md b/docs/pt-br/api/wrapper/setProps.md deleted file mode 100644 index 0d5b0c176..000000000 --- a/docs/pt-br/api/wrapper/setProps.md +++ /dev/null @@ -1,46 +0,0 @@ -# setProps(props) - -Define as propriedades do `vm` do wrapper e força sua atualização. - -**Nota: o wrapper deve ser uma instância do Vue.** - -- **Argumentos:** - - `{Object} propriedades` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -wrapper.setProps({ foo: 'bar' }) -expect(wrapper.vm.foo).toBe('bar') -``` - -Além disso, você pode passar o objeto `propsData`, que irá inicializar a instância do Vue com os valores passados. - -``` js -// Foo.vue -export default { - props: { - foo: { - type: String, - required: true - } - } -} -``` - -``` js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo, { - propsData: { - foo: 'bar' - } -}) - -expect(wrapper.vm.foo).toBe('bar') -``` diff --git a/docs/pt-br/api/wrapper/text.md b/docs/pt-br/api/wrapper/text.md deleted file mode 100644 index 4cca08814..000000000 --- a/docs/pt-br/api/wrapper/text.md +++ /dev/null @@ -1,15 +0,0 @@ -# text() - -Retorna o texto contido no wrapper. - -- **Retorna:** `{String}` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.text()).toBe('bar') -``` diff --git a/docs/pt-br/api/wrapper/trigger.md b/docs/pt-br/api/wrapper/trigger.md deleted file mode 100644 index 2748b5d5c..000000000 --- a/docs/pt-br/api/wrapper/trigger.md +++ /dev/null @@ -1,30 +0,0 @@ -# trigger(eventName {, options}]) - -Aciona um evento do elemento do wrapper. - -O método `trigger` usa o objeto opicional `options`, essas opções serão adicionadas ao evento. - -- **Argumentos:** - - `{String} eventName` - - `{Object} options` - -- **Exemplo:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo' - -const eventoClique = sinon.stub() -const wrapper = mount(Foo, { - propsData: { eventoClique } -}) - -wrapper.trigger('click') - -wrapper.trigger('click', { - botao: 0 -}) - -expect(clickHandler.called).toBe(true) -``` diff --git a/docs/pt-br/guides/README.md b/docs/pt-br/guides/README.md deleted file mode 100644 index 8739bb4bc..000000000 --- a/docs/pt-br/guides/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Guia - -* [Iniciando](./getting-started.md) -* [Dicas comuns](./common-tips.md) -* [Escolhendo um executador de testes](./choosing-a-test-runner.md) -* [Testando SFCs com Jest](./testing-SFCs-with-jest.md) -* [Testando SFCs com Mocha + webpack](./testing-SFCs-with-mocha-webpack.md) -* [Usando com o Vue Router](./using-with-vue-router.md) -* [Usando com o Vuex](./using-with-vuex.md) diff --git a/docs/pt-br/guides/choosing-a-test-runner.md b/docs/pt-br/guides/choosing-a-test-runner.md deleted file mode 100644 index 94a6ec1a0..000000000 --- a/docs/pt-br/guides/choosing-a-test-runner.md +++ /dev/null @@ -1,46 +0,0 @@ -# Escolhendo um executador de testes - -Um *test runner* é um programa com objetivo de executar seus testes. - -Existem muitos executadores de testes populares no Javascript, o `vue-test-utils` funciona com todos eles. - -Há algumas coisas a considerar ao escolher um *test runner*: conjunto de recursos, desempenho e suporte a pré-compilação de componentes de arquivo único (SFC). Depois de comparar cuidadosamente as bibliotecas existentes, aqui estão dois *test runner* que recomendamos: - -- [Jest](https://facebook.github.io/jest/docs/en/getting-started.html#content) é o executador de testes mais completo. Ele requer menos configuração, usa JSDOM por padrão, e fornece uma ótima experiência de usuário na linha de comando. Contudo, você vai precisar de um pré-processador para ser possível importar componentes SFC em seus testes. Nos criamos o pré-processador `vue-jest`, para lidar com os recursos SFC mais comuns, mas atualmente não possuímos 100% de compatibilidade com o `vue-loader`. - -- [mocha-webpack](https://github.com/zinserjan/mocha-webpack) é um -wrapper que envolve o webpack e o Mocha, mas com uma interface simplificada e um modo observador. O benefício dessa configuração é o suporte SFC completo via webpack + `vue-loader`, mas isso requer maiores configurações antecipadas. - -## Ambiente de navegador - -O `vue-test-utils` depende de um ambiente de navegador. Tecnicamente, você pode executa-lo em um navegador real, mas não recomendamos isso por causa da complexidade de executar navegadores reais em diferentes plataformas. Portanto, recomendamos que execute seus testes no Node.js com um ambiente virtual de navegador usando o [JSDOM](https://github.com/tmpvar/jsdom). - -O Jets configura automaticamente o JSDOM. Para outros *test runners*, você pode configurar o JSDOM manualmente para os seus testes usando o [jsdom-global](https://github.com/rstacruz/jsdom-global) na entrada dos testes: - -``` bash -npm install --save-dev jsdom jsdom-global -``` ---- -``` js -// na entrada ou configurações dos testes -require('jsdom-global')() -``` - -## Testando componentes de arquivo único (SFC) - -Os componentes de arquivo único do Vue requerem uma pré-compilação antes que possam ser executados no Node ou no navegador. Há duas maneiras recomendadas para executar essa compilação: com o pré-processador Jest ou diretamente usando o webpack. - -O pré-processador `vue-jest` suporta as funcionalidades básicas dos SFCs, mas atualmente não manipula blocos de estilos ou personalizados, que são suportados apenas no `vue-loader`. Se você depender desses recursos ou de outras configurações específicas do webpack, você precisará usar uma configuração baseada no webpack + `vue-loader`. - -Leia os guias a seguir para cofigurações diferentes: - -- [Testando SFCs com Jest](./testing-SFCs-with-jest.md) -- [Testando SFCs com Mocha + webpack](./testing-SFCs-with-mocha-webpack.md) - -## Recursos - -- [Comparação de desempenho entre test runners](https://github.com/eddyerburgh/vue-unit-test-perf-comparison) -- [Projeto de exemplo com o Jest](https://github.com/vuejs/vue-test-utils-jest-example) -- [Projeto de exemplo com o Mocha](https://github.com/vuejs/vue-test-utils-mocha-webpack-example) -- [Projeto de exemplo com o tape](https://github.com/eddyerburgh/vue-test-utils-tape-example) -- [Projeto de exemplo com o AVA](https://github.com/eddyerburgh/vue-test-utils-ava-example) diff --git a/docs/pt-br/guides/common-tips.md b/docs/pt-br/guides/common-tips.md deleted file mode 100644 index cefda989d..000000000 --- a/docs/pt-br/guides/common-tips.md +++ /dev/null @@ -1,136 +0,0 @@ -# Dicas comuns - -## Sabendo o que testar - -Para componentes com interface não recomendamos o foco na cobertura completa baseada em linha, porque ela leva muito o foco para detalhes internos da implementação dos componentes, podendo resultar em testes frágeis. - -Em vez disso, nós recomendamos escrever testes que verifiquem seus componentes com interface pública e trate os internos como uma caixa preta. Um caso de teste único irá verificar se a entrada (interações do usuário ou troca de props) forneceu o resultado (renderização ou emissão de eventos) esperado para o componente. - -Por exemplo, para o componente `Counter` que incrementa um contador em cada vez que um botão é clicado, seu caso de teste teria que simular o clique e verificar se a saída renderizada se incrementou. O teste não se importa sobre como `Counter` incrementou o valor, ele apenas se preocupa com a entrada e a saída dos dados. - -O benefício desta abordagem é que enquanto a interface pública do seu componente permanece a mesma, seus testes irão passar sem se importar de como o componente faz a implementação do código interno e se houve ou não mudanças por lá. - -Esse tópico é discutido com mais detalhes em uma [excelente apresentação de Matt O'Connell](http://slides.com/mattoconnell/deck#/). - -## Renderização superficial - -Em testes de unidade, normalmente queremos nos focar no componente a ser testeado, isolando-o como uma unidade e evitando verificações indiretas em comportamentos dos seus filhos. - -Além disso, para componentes que possuem muitos componentes filhos, toda a árvore de renderização pode ficar realmente grande. A repetição de renderização de todos componentes filhos vão deixar seus testes lentos. - -O `vue-test-utils` permite que você monte um componente sem renderizar seus componentes filhos, para isso, use o método `shallowMount`: - -```js -import { shallowMmount } from '@vue/test-utils' - -// obtém o wrapper contendo a instância montada de Componente -const wrapper = shallowMount(Componente) -wrapper.vm // instância do Vue já montada -``` - -## Verificando os eventos emitidos - -Cada wrapper montado grava automaticamente todos os eventos emitidos pela instância Vue contida. Você pode recuperar os eventos registrados usando o método `emitted`: - -``` js -wrapper.vm.$emit('foo') -wrapper.vm.$emit('foo', 123) - -/* -wrapper.emitted() retorna o objeto a seguir: -{ - foo: [ [], [123] ] -} -*/ -``` - -Então você pode criar asserções baseadas nesses dados: - -``` js -// verifica se o evento 'foo' foi emitido -expect(wrapper.emitted().foo).toBeTruthy() - -// verifica as vezes que o evento 'foo' doi emitido -expect(wrapper.emitted().foo.length).toBe(2) - -// verifica a carga do segundo evento 'foo' emitido -expect(wrapper.emitted().foo[1]).toEqual([123]) -``` - -Além disso, você pode pegar um Array dos eventos emitidos em ordem de chamada com o método [wrapper.emittedByOrder()](../api/wrapper/emittedByOrder.md). - -## Manipulando o estado do componente - -Você pode manipular diretamente o estado do componente usando os métodos `setData` ou `setProps` no wrapper: - -```js -wrapper.setData({ contador: 10 }) - -wrapper.setProps({ foo: 'bar' }) -``` - -## Simulando propriedades - -Você pode passar propriedades para o componente usando a opção `propsData` integrada no Vue: - -```js -import { mount } from '@vue/test-utils' - -mount(Component, { - propsData: { - umaProp: 'qualquer valor' - } -}) -``` - -Você também pode atualizar as propriedades mesmo com o componente já montado, para isso use o método `wrapper.setProps({})`. - -*Para ver a lista completa de opções, por favor veja a seção [opções de montagem](../api/options.md) nessa documentação.* - -## Aplicando plugins e mixins globais - -Alguns dos seus componentes podem ter características injetadas por um plugin ou mixin global, por exemplo o `vuex`, `vue-router` e `vue-multilanguage`. - -Se você está escrevendo testes para componentes de uma aplicação específica, você pode configurar os plugins e mixins globais uma vez na entrada dos seus testes. Mas, em alguns casos, por exemplo, testando um pacote de componentes genéricos que podem ser compartilhados em diferentes aplicações, será melhor testar seus componentes com uma configuração mais isolada, sem popular o construtor global do Vue. Nós podemos usar o método [createLocalVue](../api/createLocalVue.md) para conseguir isso: - -``` js -import { createLocalVue } from '@vue/test-utils' - -// criando um construtor ampliado do Vue -const localVue = createLocalVue() - -// Instalando normalmente os seus plugins -localVue.use(MeuPlugin) - -// Passe o localVue para o wrapper do componente -mount(Componente, { - localVue -}) -``` - -## Simulando injeções - -Outra estratégia para injetar propriedades é simplesmente simular ela. Você pode fazer isso com a opção `mocks`: - -```js -import { mount } from '@vue/test-utils' - -const $route = { - path: '/', - hash: '', - params: { id: '123' }, - query: { q: 'hello' } -} - -mount(Component, { - mocks: { - // adiciona o objeto $route simulado na instância Vue - // antes da montagem do componente - $route - } -}) -``` - -## Lidando com o roteamento - -Uma vez que o roteamento, por definição, tem a ver com a estrutura geral da aplicação e envolve muitos componentes, é melhor testado atráves de testes de integração ou de ponta a ponta. Para componentes individuais que dependem dos recursos do `vue-router`, você pode simula-lo usando as técnicas mencionadas acima. diff --git a/docs/pt-br/guides/dom-events.md b/docs/pt-br/guides/dom-events.md deleted file mode 100644 index 5b3402db4..000000000 --- a/docs/pt-br/guides/dom-events.md +++ /dev/null @@ -1,194 +0,0 @@ -# Testando mouse, teclas e outros eventos do DOM - -## Desencadear eventos - -O wrapper (wrapper) expõe o método `trigger`. Ele pode ser usado para desencadear eventos do DOM. - -```js -const wrapper = mount(MeuBotao) - -wrapper.trigger('click') -``` - -Você deve estar ciente que esse método também retorna um wrapper. Assumindo que em `MeuComponente` há um botão, o código a seguir simula o clique no botão. - -```js -const wrapper = mount(MeuComponente) - -wrapper.find('button').trigger('click') -``` - -## Opções - -O método `trigger` pode receber um objeto `options` opcional. As propriedades no objeto `options` serão adicionadas no evento. - -```js -const wrapper = mount(MeuBotao) - -wrapper.trigger('click', { button: 0 }) -``` - -## Exemplo de clique no mouse - -**Componente que será testado** - -```html - - - -``` - -**Teste** - -```js -import SimNaoComponente from '@/componentes/SimNaoComponente' -import { mount } from '@vue/test-utils' -import sinon from 'sinon' - -describe('Evento de clique', () => { - it('Clieque no botão sim chama o método com o argumento "sim"', () => { - const spy = sinon.spy() - const wrapper = mount(SimNaoComponente, { - propsData: { - meLigou: spy - } - }) - wrapper.find('button.sim').trigger('click') - - spy.should.have.been.calledWith('sim') - }) -}) -``` - -## Exemplo do teclado - -**Componente a ser testado** - -Esse componente permite incrementar ou decrementar o contador usando várias teclas do teclado. - -```html - - - -``` - -**Test** - -```js -import ContadorComponente from '@/componentes/ContadorComponente' -import { mount } from '@vue/test-utils' - -describe('Testes de eventos de tecla', () => { - it('Contador é zero por padrão', () => { - const wrapper = mount(ContadorComponente) - expect(wrapper.vm.contador).toBe(0) - }) - - it('Tecla para cima incrementa contador para um', () => { - const wrapper = mount(ContadorComponente) - wrapper.trigger('keydown.up') - expect(wrapper.vm.contador).toBe(1) - }) - - it('Tecla para baixo decrementa contador para quatro', () => { - const wrapper = mount(ContadorComponente) - wrapper.vm.contador = 5 - wrapper.trigger('keydown.down') - expect(wrapper.vm.contador).toBe(4) - }) - - it('Tecla esc volta o contador para zero', () => { - const wrapper = mount(ContadorComponente) - wrapper.vm.contador = 5 - wrapper.trigger('keydown.esc') - expect(wrapper.vm.contador).toBe(0) - }) - - it('Tecla A define o contador para 13', () => { - const wrapper = mount(ContadorComponente) - wrapper.trigger('keydown', { - which: 65 - }) - expect(wrapper.vm.contador).toBe(13) - }) -}) - -``` - -**Limitações** - -O nome da tecla depois do ponto em `keydown.up` é traduzido para o `keyCode`. Isso é suportado para os seguintes nomes: - -* enter, tab, delete, esc, space, up, down, left, right - -## Importante - -vue-test-utils desencadeia eventos de forma síncrona. Consequentemente, o uso do `vue.nextTick` não é necessário. diff --git a/docs/pt-br/guides/getting-started.md b/docs/pt-br/guides/getting-started.md deleted file mode 100644 index 50710fd6c..000000000 --- a/docs/pt-br/guides/getting-started.md +++ /dev/null @@ -1,116 +0,0 @@ -# Iniciando - -## Configuração - -Para obter um exemplo rápido de uso do `vue-test-utils` clone nosso repositório de demonstração que contém as configurações básicas e instale as dependências: - -``` bash -git clone https://github.com/vuejs/vue-test-utils-getting-started -cd vue-test-utils-getting-started -npm install -``` - -Você verá que o projeto inclui um componente simples, chamado `counter.js`: - -```js -// counter.js - -export default { - template: ` -
- {{ count }} - -
- `, - - data () { - return { - count: 0 - } - }, - - methods: { - increment () { - this.count++ - } - } -} -``` - -### Montando seus componentes - -O `vue-test-utils` testa os componentes do Vue montando-os isoladamente, simulando as entradas necessárias (propriedades, slots e eventos de usuário) e verificando as saídas (renderização, eventos personalizados emitidos). - -Os componentes montados são retornados em um wrapper (wrapper) que expõe muitos métodos para manipular, percorrer e consultar a instância do componente Vue correspondente. - -Você pode criar essses wrappers usando o método `mount`. Vamos criar um chamado `test.js`: - -```js -// test.js - -// Importando o método mount() do test utils -// e o componente Counter para ser testado -import { mount } from '@vue/test-utils' -import Counter from './counter' - -// Agora montamos o componente e obtermos o wrapper -const wrapper = mount(Counter) - -// Você pode acessar a instância atual do Vue através de wrapper.vm -const vm = wrapper.vm - -// Para inspecionar a composição do wrapper exiba-o no console -// ...Sua aventura com o vue-test-utils começa agora :) -console.log(wrapper) -``` - -### Testar a saída HTML do componente - -Agora que nós já temos o wrapper, a primeira coisa que podemos fazer é verificar se a saída HTML que componente nos entrega é a esperada. - -```js -import { mount } from '@vue/test-utils' -import Counter from './counter' - -describe('Counter', () => { - // Montando o componente e obtendo o wrapper - const wrapper = mount(Counter) - - it('renderiza o HTML correto', () => { - expect(wrapper.html()).toContain('0') - }) - - // Também é fácil verificar se um elemento existe - it('verifica se o botão foi desenhado', () => { - expect(wrapper.contains('button')).toBe(true) - }) -}) -``` - -Agora execute os testes com o comando `npm tests`. Você deve ver os testes passando. - -### Simulando a interação do usuário - -Nosso `Counter` deve incrementar o contador quando o usuário clica no botão. Para simular esse comportamento, primeiro precisamos localizar o botão com `wrapper.find()`, que retorna um wrapper (wrapper) para o elemento do botão. Agora nós podemos simular o evento de clique, chamando o método `trigger()` no wrapper do botão: - -```js -it('o clique do botão deve incrementar a contagem', () => { - expect(wrapper.vm.count).toBe(0) - const button = wrapper.find('button') - button.trigger('click') - expect(wrapper.vm.count).toBe(1) -}) -``` - -### E quanto ao `nextTick`? - -Os lotes Vue estão pendentes de atualizações do DOM, aplicando-as de forma assíncrona para evitar re-renders desnecessários causados por múltiplas mutações de dados. É por isso que, na prática, muitas vezes temos que usar `Vue.nextTick` para esperar até que o Vue realize a atualização real do DOM, depois de ativar algumas mudanças de estado. - -Para simplificar o uso, o `vue-test-utils` aplica todas as atualizações de forma síncrona, então você não precisa usar o `Vue.nextTick` para esperar por atualizações do DOM nos seus testes. - -*Nota: o `nextTick` ainda é necessário para quando você precisa avançar explicitamente o ciclo do evento, ou seja, para operações como retorno de chamadas assíncronas ou resultados de uma Promise.* - -## A seguir - -- Integre o `vue-test-utils` no seu projeto [escolhendo seu executador de testes](./choosing-a-test-runner.md) -- Leia mais sobre [técnicas comuns ao escrever testes](./common-tips.md) diff --git a/docs/pt-br/guides/testing-SFCs-with-jest.md b/docs/pt-br/guides/testing-SFCs-with-jest.md deleted file mode 100644 index a4a459af4..000000000 --- a/docs/pt-br/guides/testing-SFCs-with-jest.md +++ /dev/null @@ -1,182 +0,0 @@ -# Testando componentes de arquivo único com Jest - -> Um projeto de exemplo para esta configuração está disponível no [GitHub](https://github.com/vuejs/vue-test-utils-jest-example). - -Jest é um executador de teste desenvolvido pelo Facebook, visa entregar uma bateria de testes de unidade. Você pode aprender mais sobre o Jets na sua [documentanção oficial](https://facebook.github.io/jest/). - -## Configurando o Jest - -Nós vamos assumir que você está iniciando com a configuração que já possui o webpack, vue-loader e Babel configurados corretamente - por exemplo o template `webpack-simple` fornecido pelo `vue-cli`. - -A primeira coisa para se fazer é instalar o Jest e o `vue-test-utils`: - -```bash -$ npm install --save-dev jest vue-test-utils -``` -ou - -```bash -$ npm install --save-dev jest @vue/test-utils -``` - -Posteriormente, devemos definir um script novo no `package.json`: - -```json -// package.json -{ - "scripts": { - "test": "jest" - } -} -``` - -## Processando SFCs com o Jest - -Para ensinar o Jest cmo processar arquivos `*.vue`, precisamos instalar e configurar o pré-processador `vue-jest`: - -``` bash -npm install --save-dev vue-jest -``` - -Agora, crie um bloco chamado `jest` no `package.json`: - -``` json -{ - // ... - "jest": { - "moduleFileExtensions": [ - "js", - "json", - // diga que o Jest irá reconhecer arquivos vue - "vue" - ], - "transform": { - // processa arquivos vue com o vue-jest - ".*\\.(vue)$": "/node_modules/vue-jest" - }, - } -} -``` - -> **Nota:** o `vue-jest` atualmente não suporta todos os recursos do `vue-loader`, por exemplo, blocos personalizados e estilo de carregamento. Além disso, alguns recursos específicos do webpack, como o [code-splitting](http://www.vuejs-brasil.com.br/separando-codigo-vue), também não são suportados. Para usá-los, leia o guia [testando SFCs com Mocha + webpack](./testing-SFCs-with-mocha-webpack.md). - -## Manipulação de alias do webpack - -Se você usa um alias de resolução na configuração do webpack, por exemplo usar `@` como atalho para `/src`, você precisará adicionar uma configuração correspondente para o Jest, usando a opção `moduleNameMapper`: - -``` json -{ - // ... - "jest": { - // ... - // suporta o mapeamento @ para /src do código fonte - "moduleNameMapper": { - "^@/(.*)$": "/src/$1" - } - } -} -``` - -## Configurando o Babel no Jest - -Apesar das últimas versões do Node já suportar muitos recursos do ES2015, você ainda pode querer usar a síntaxe e stage-x nos módulos ES em seus testes. Para isso, precisamos instalar o `babel-jest`: - -``` bash -npm install --save-dev babel-jest -``` - -Agora, nos precisamos dizer ao Jest para processar o arquivos de teste em Javascript com o `babel-jest`. Para isso, adicionamos uma entrada `jest.transform` no `package.json`: - -``` json -{ - // ... - "jest": { - // ... - "transform": { - // ... - // processar arquivos .js com o babel-jest - "^.+\\.js$": "/node_modules/babel-jest" - }, - // ... - } -} -``` - -> Por padrão, o `babel-jest` configura-se automaticamente enquanto estiver instalado. Contudo, adicionamos explicitamente uma transformação para arquivos `*.vue`, então agora precisamos configurar isso no `babel-jest` também. - -Assumindo que você usa o `babel-preset-env` com o webpack, a configuração padrão do Babel desabilitará a transpilação dos módulos ES porque o webpack já sabe como lidar com módulos ES. Entretanto, precisamos habilitar isso para nossos testes, porque o Jest executa seus testes diretamente no Node. - -Além disso, podemos dizer ao `babel-preset-env` para segmentar a versão do Node que estamos usando. Isso ignora a transposição de recursos desnecessários e faz com que nossos testes sejam mais rápidos. - -Para aplicar todas essas opções apenas para os testes, coloque-as em uma configuração separada em `env.test` (isso será automaticamente pego pelo `babel-jest`). - -Exemplo do novo `.babelrc`: - -``` json -{ - "presets": [ - ["env", { "modules": false }] - ], - "env": { - "test": { - "presets": [ - ["env", { "targets": { "node": "current" }}] - ] - } - } -} -``` - -### Teste instantâneo - -Você pode usar o [`vue-server-renderer`](https://github.com/vuejs/vue/tree/dev/packages/vue-server-renderer) para transformar um componente em uma String para que ele possa ser salvo como instântaneo para o [teste instântaneo com Jest](https://facebook.github.io/jest/docs/en/snapshot-testing.html). - -O resultado do `vue-server-renderer` inclui alguns atributos específicos de SSR e ignora espaços em branco, dificultando a detecção de um diff. Podemos melhorar o instantâneo salvo com um serializador personalizado: - -``` bash -npm install --save-dev jest-serializer-vue -``` - -Em seguida, configure-o no `package.json`: - -``` json -{ - // ... - "jest": { - // ... - // serializador para o instantâneo - "snapshotSerializers": [ - "/node_modules/jest-serializer-vue" - ] - } -} -``` - -### Colocando arquivos de teste - -Por padrão, o Jest irá recursivamente pegar todos os arquivosque tenham uma extensão `.spec.js` ou `.test.js` em todo o seu projeto. Se isso não for de acordo com o seu esperado, é possível [alterar o testRegex](https://facebook.github.io/jest/docs/en/configuration.html#testregex-String) na seção `config` no arquivo `package.json`. - -O Jest recomenda a criação de um diretório `__tests__` logo ao lado do código que está sendo testado, mas sinta-se livre para estruturar seus testes conforme entender. Apenas tenha cuidado com o fato de o Jest criar um diretório `__snapshots__` ao lado dos arquivos de teste que executam testes instantâneos. - -### Exemplo de spec - -Se você está familiarizado com o Jasmine, você deve se sentir em casa com a [API de asserção](https://facebook.github.io/jest/docs/en/expect.html#content) do Jest: - -```js -import { mount } from '@vue/test-utils' -import Componente from './componente' - -describe('Componente', () => { - test('é uma instância do Vue', () => { - const wrapper = mount(Componente) - expect(wrapper.isVueInstance()).toBeTruthy() - }) -}) -``` - -### Recursos - -- [Exemplo de projeto para esta configuração](https://github.com/vuejs/vue-test-utils-jest-example) -- [Exemplos e slides do Vue Conf 2017](https://github.com/codebryo/vue-testing-with-jest-conf17) -- [Jest](https://facebook.github.io/jest/) -- [Babel preset env](https://github.com/babel/babel-preset-env) diff --git a/docs/pt-br/guides/testing-SFCs-with-mocha-webpack.md b/docs/pt-br/guides/testing-SFCs-with-mocha-webpack.md deleted file mode 100644 index adbd5f789..000000000 --- a/docs/pt-br/guides/testing-SFCs-with-mocha-webpack.md +++ /dev/null @@ -1,180 +0,0 @@ -# Testando componentes de arquivo único com o Mocha + webpack - -> Um projeto de exemplo com essa configuração está disponível no [GitHub](https://github.com/vuejs/vue-test-utils-mocha-webpack-example). - -Outra estratégia para testar SFCs é compilar todos os seus testes via webpack e depois rodar em um *test runner*. A vantagem dessa abordagem é poder ter o suporte total para todos os recursos do webpack e `vue-loader`, por isso não temos que fazer compromissos em nosso código-fonte. - -Tecnicamente você pode usar qualquer executador de teste que você goste e alinhar as coisas de forma manual, mas descobrimos o [`mocha-webpack`](https://github.com/zinserjan/mocha-webpack) para fornecer uma experiência muito simplificada para essa tarefa específica. - -## Configurando o `mocha-webpack` - -Assumiremos que você está começando com o webpack, vue-loader e babel corretamente configurados, por exemplo com o template `webpack-simple` fornecido pelo `vue-cli`. - -A primeira coisa a se fazer é instalar as dependências dos testes: - -``` bash -npm install --save-dev @vue/test-utils mocha mocha-webpack -``` - -Posteriormente, defina o script `test` no `package.json`: - -```json -// package.json -{ - "scripts": { - "test": "mocha-webpack --webpack-config webpack.config.js --require test/setup.js test/**/*.spec.js" - } -} -``` - -Temos algumas coisas a serem observadas aqui: - -- A flag `--webpack-config` especifica o arquivo de configuração do webpack para seus testes. Na maioria dos casos, ele é idêntico à configuração que você usa para o projeto real, mas com um pequeno ajuste que falaremos mais tarde. - -- A flag `--require` garante que o arquivo `test/setup.js` seja executado antes de qualquer teste, nele nós podemos configurar o ambiente global para nossos testes que irão ser executados. - -- O último argumento é um glob para os arquivos de teste a serem incluídos no pacote de teste. - -### Configurações extras do webpack - -#### Externalização das dependências do NPM - -Em nossos testes, provavelmente importaremos uma série de dependências do NPM - algumas dessas dependências podem ser escritas sem o uso do navegador em mente e simplesmente não serão empacotadas corretamente pelo webpack. Então consideramos a externalização das dependências, que melhora consideravelmente a velocidade na inicialização dos testes. Podemos externalizar todas as dependências do NPM com o `webpack-node-externals`: - -```js -// webpack.config.js -const nodeExternals = require('webpack-node-externals') - -module.exports = { - // ... - externals: [nodeExternals()] -} -``` - -#### Mapas de origem - -Os mapas de origem precisam ser incorporados pra ser capturados pelo `mocha-webpack`. A configuração recomendada é: - -``` js -module.exports = { - // ... - devtool: 'inline-cheap-module-source-map' -} -``` - -Se for depurar pela IDE, também recomendamos adicionar o seguinte: - -``` js -module.exports = { - // ... - output: { - // ... - // use caminhos absolutos nos mapas de origem (depuração via IDE) - devtoolModuleFilenameTemplate: '[absolute-resource-path]', - devtoolFallbackModuleFilenameTemplate: '[absolute-resource-path]?[hash]' - } -} -``` - -### Configurando o ambiente de navegador - -O `vue-test-utils` requere um ambiente de navegador para ser executado. Nos simulamos isso no Node.js usando o `jsdom-global`: - -```bash -npm install --save-dev jsdom jsdom-global -``` - -Então, em `test/setup.js`: - -``` js -require('jsdom-global')() -``` - -Isso adiciona um ambiente de navegador ao Node, de modo que o `vue-test-utils` possa ser executado corretamente. - -### Escolhendo uma biblioteca de asserção - -[Chai](http://chaijs.com/) é uma biblioteca popular que é comumente usada ao lado do Mocha. Você também pode querer usar o [Sinon](http://sinonjs.org/) para criar spies e esboços. - -Como alternativa, você pode usar o `expect` que agora é uma parte do Jest e expõe [exatamente a mesma API](http://facebook.github.io/jest/docs/en/expect.html#content) na documentação do Jest. - -Estaremos usando o `expect`aqui e o tornaremos disponível globlamente para que não tenhamos que importá-lo em cada teste: - -``` bash -npm install --save-dev expect -``` - -Então, em `test/setup.js`: - -``` js -require('jsdom-global')() - -global.expect = require('expect') -``` - -### Otimizando o Babel para os testes - -Observe que estamos usando o `babel-loader` para lidar com o JavaScript. Você já deve ter o Babel configurado se existir um arquivo `.babelrc` no seu projeto. O `babel-loader` usará automaticamente o mesmo arquivo para realizar a configuração. - -Uma coisa deve ser observada se você está usando o Node 6+, a partir dessa versão ele suporta a maioria dos recursos do ES2015, então você pode configurar separadamente a opção Babel [env option](https://babeljs.io/docs/usage/babelrc/#env-option) que transpila somente os recursos que ainda não são suportados na versão do Node instalada, por exemplo o stage-2 ou o suporte de síntaxe de fluxo, entre outros. - -### Adicionando um teste - -Crie um arquivo no diretório `src` chamado `Contador.vue`: - -``` html - - - -``` - -Agora crie um arquivo de teste chamado `test/Contador.spec.js` com o código a seguir: - -```js -import { shallow } from '@vue/test-utils' -import Contador from '../src/Contador.vue' - -describe('Contador.vue', () => { - it('incrementa o contador quando o botão é clicado', () => { - const wrapper = shallow(Contador) - wrapper.find('button').trigger('click') - expect(wrapper.find('div').text()).toMatch('1') - }) -}) -``` - -Agora nós podemos executar o teste usando: - -``` -npm run test -``` - -Woohoo :o, nossos testes estão rodando! - -### Recursos - -- [Projeto de exemplo com essa configuração](https://github.com/vuejs/vue-test-utils-mocha-webpack-example) -- [Mocha](https://mochajs.org/) -- [mocha-webpack](http://zinserjan.github.io/mocha-webpack/) -- [Chai](http://chaijs.com/) -- [Sinon](http://sinonjs.org/) -- [jest/expect](http://facebook.github.io/jest/docs/en/expect.html#content) diff --git a/docs/pt-br/guides/using-with-vue-router.md b/docs/pt-br/guides/using-with-vue-router.md deleted file mode 100644 index 066468e07..000000000 --- a/docs/pt-br/guides/using-with-vue-router.md +++ /dev/null @@ -1,72 +0,0 @@ -# Usando com o Vue Router - -## Instalando o Vue Router nos testes - -Você nunca deveria instalar o Vue Router no construtor base do Vue dos seus testes. A instalação do Vue Router adiciona `$route` e `$router` como propriedades de somente leitura no protótipo dos componentes Vue. - -Para evitar isso, nós criamos o `localVue` e instalamos o Vue Router no seu interior. - -```js -import VueRouter from 'vue-router' -const localVue = createLocalVue() -localVue.use(VueRouter) -const router = new VueRouter() - -shallow(Component, { - localVue, - router -}) -``` - -## Testando componentes que usam `router-link` ou `router-view` - -Quando você instala o Vue Router, os componentes `router-link` e `router-view` são registrados. Isso significa que podemos usa-los em qualquer lugar da nossa aplicação sem precisar importá-los. - -Quando executamos os testes, nós precisamos disponibilizar os componentes do Vue Router para os componentes que estamos montando. Existem dois métodos para se fazer isso. - -### Usando esboços - -```js -shallow(Componente, { - stubs: ['router-link', 'router-view'] -}) -``` - -### Instalando o Vue Router com o localVue - -```js -import VueRouter from 'vue-router' -const localVue = createLocalVue() - -localVue.use(VueRouter) - -shallow(Componente, { - localVue -}) -``` - -## Simulando o `$route` e o `$router` - -Às vezes você quer testar que um componente faz algo com os parâmetros dos objetos `$route` e `$router`. Para fazer isso você pode passar mocks personalizados para a instância do Vue. - -```js -const $route = { - path: '/rota/qualquer' -} - -const wrapper = shallow(Component, { - mocks: { - $route - } -}) - -wrapper.vm.$router // /rota/qualquer -``` - -## Obstáculos comuns - -A instalação do Vue Router adiciona `$route` e `$router` como propriedades de somente leitura do protótipo Vue. - -Isso significa que todos os testes futuros que tentam simular o `$route` ou o `$router` irão falhar. - -Para evitar isso, nunca instale o Vue Router quando estiver executando seus testes. diff --git a/docs/pt-br/guides/using-with-vuex.md b/docs/pt-br/guides/using-with-vuex.md deleted file mode 100644 index d4a07c1f4..000000000 --- a/docs/pt-br/guides/using-with-vuex.md +++ /dev/null @@ -1,266 +0,0 @@ -# Usando com o Vuex - -Nesse guia verems como testar o Vuex nos componentes com o `vue-test-utils`. - -## Simulando ações - -Vejamos algum código... - -Esse é o componente que queremos testar. Ele chama ações do Vuex. - -``` html - - - -``` - -Para os fins desse teste, não nos importa o que cada ação do Vuex faz ou como a store é criada. Nos precisamos apenas saber que essas ações estão sendo disparadas quando deveriam, e que elas são disparadas com os valores esperados. - -Para testar isso, precisamos passar um mock da store para o Vue quando envelopamos nosso componente. - -Em vez de passar a store para o construtor do Vue, nós passamos um [localVue](../api/options.md#localvue). Um localVue é um construtor local do Vue com escopo que permite alterações sem afetar o construtor global. - -Vamos ver como isso se apreenta no código: - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import Acoes from '../../../src/componentes/Acoes' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('Acoes.vue', () => { - let acoes - let store - - beforeEach(() => { - acoes = { - acaoDeClique: jest.fn(), - acaoInput: jest.fn() - } - - store = new Vuex.Store({ - state: {}, - acoes - }) - }) - - it('chama a ação acaoInput da store quando o valor do input é inserido e um evento do input é disparado', () => { - const wrapper = shallow(Acoes, { store, localVue }) - const input = wrapper.find('input') - input.element.value = 'input' - input.trigger('input') - expect(acoes.acaoInput).toHaveBeenCalled() - }) - - it('não liga a ação acaoInput da store quando o valor do input não é inserido e um evento do input é disparado', () => { - const wrapper = shallow(Acoes, { store, localVue }) - const input = wrapper.find('input') - input.element.value = 'not input' - input.trigger('input') - expect(acoes.acaoInput).not.toHaveBeenCalled() - }) - - it('calls store action actionClick when button is clicked', () => { - const wrapper = shallow(Actions, { store, localVue }) - wrapper.find('button').trigger('click') - expect(actions.actionClick).toHaveBeenCalled() - }) -}) -``` - -O que está acontecendo aqui? Primeiro contamos ao localVue que ele usará o Vuex no método `localVue.use`. Este é apenas um wrapper do `Vue.use`. - -Em seguida, fazemos uma store simulada chamando o método `Vuex.Store` com os valores do mock. Nós apenas passamos as ações, já que é o que nos importa no momento. - -As ações são [funções de mock do Jest](https://facebook.github.io/jest/docs/en/mock-functions.html). Essas funções simuladas nos dão alguns métodos para verificar se as determinadas ações foram ou não chamadas. - -Então, podemos fazer a asserção nos nossos testes esperando que essas ações do Vuex foram chamadas no momento esperado. - -A forma como definimos a store pode parecer um pouco estranha para você. - -Nós usamos o `beforeEach` para garantir que teremos uma store limpa antes de cada teste. O `beforeEach` é um método gancho do Mocha que é chamado antes de cada teste. Em nosso teste, reatribuímos os valores da store. Se nós não fizessemos isso, as funções simuladas deveriam ser reiniciadas automaticamente. Esse método também permite que alteremos o estado nos testes sem que afete os testes posteriores, pois ele será redefinido entre esses testes. - -A coisa mais impotante a ser notada neste teste é que **criamos um mock da store e depois passamos ela para o vue-test-utils**. - -Ótimo, agora que nós já conseguimos simular as actions, vamos ver como simular o getters. - -## Simulando os getters - -``` html - - - -``` - -Esse é um componente bastante simples, Ele mostra os resultados capturados pelos getters `cliques` e `valorDoInput`. Mais um vez, nós não importamos com o que esses getters retornam e o que fazem no seu interior, mas sim com o resultado que ele acarretará no componente a ser testado. - -Valos ver o teste do componente: - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import GettersComponente from '../../../src/componentes/GettersComponente' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('GettersComponente.vue', () => { - let getters - let store - - beforeEach(() => { - getters = { - cliques: () => 2, - valorDoInput: () => 'input' - } - - store = new Vuex.Store({ - getters - }) - }) - - it('Renderiza o valor do input na primeira tag P', () => { - const wrapper = shallow(GettersComponente, { store, localVue }) - const p = wrapper.find('p') - expect(p.text()).toBe(getters.valorDoInput()) - }) - - it('Renderiza o valor de cliques na segunda tag P', () => { - const wrapper = shallow(GettersComponente, { store, localVue }) - const p = wrapper.findAll('p').at(1) - expect(p.text()).toBe(getters.cliques().toString()) - }) -}) -``` - -Esse teste é bastante similar com nosso teste de actions. Criamos um mock da store antes de cada teste, passamos ele como uma opção do método `shallow`, e verificamos o valor retornado pelo getter, verificando se o mesmo foi renderizado no template do componente. - -Isso é ótimo, mas se quisermos garantir que nossos getters estão retornando a parte correta do nosso state? - -## Criando mocks com módulos - -Os [módulos](https://vuex.vuejs.org/en/modules.html) são úteis para separar nossa store em partes gerenciáveis. Podemos usa-los em nossos testes. - -Dê uma olhada nesse nosso componente: - -``` html - - - -``` - -Esse simples componente incluí uma ação e um getter. - -E seu teste fica assim: - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import ModuloComponente from '../../../src/componentes/ModuloComponente' -import modulo from '../../../src/store/modulo' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('ModuloComponente.vue', () => { - let actions - let state - let store - - beforeEach(() => { - state = { - modulo: { - cliques: 2 - } - } - - actions = { - cliqueEmModulo: jest.fn() - } - - store = new Vuex.Store({ - state, - actions, - getters: modulo.getters - }) - }) - - it('chama a ação cliqueEmModulo quand o botão é clicado', () => { - const wrapper = shallow(ModuloComponente, { store, localVue }) - const button = wrapper.find('button') - button.trigger('click') - expect(actions.cliqueEmModulo).toHaveBeenCalled() - }) - - it('Renderiza os cliques do state do módulo no primeiro P', () => { - const wrapper = shallow(ModuloComponente, { store, localVue }) - const p = wrapper.find('p') - expect(p.text()).toBe(state.modulo.cliques.toString()) - }) -}) -``` - -### Recursos - -- [Projeto de exemplo com essa configuração](https://github.com/eddyerburgh/vue-test-utils-vuex-example) -- [localVue](../api/options.md#localvue) -- [createLocalVue](../api/createLocalVue.md) diff --git a/docs/ru/README.md b/docs/ru/README.md deleted file mode 100644 index 91f9ca68d..000000000 --- a/docs/ru/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# vue-test-utils - -`vue-test-utils` — официальная библиотека модульного тестирования для Vue.js. - -## Содержание - -* [Руководства](guides/README.md) - * [Введение](guides/getting-started.md) - * [Общие советы](guides/common-tips.md) - * [Мышь, клавиши и другие события DOM](guides/dom-events.md) - * [Чем запускать тесты](guides/choosing-a-test-runner.md) - * [Тестирование однофайловых компонентов с Jest](guides/testing-SFCs-with-jest.md) - * [Тестирование однофайловых компонентов с Mocha + webpack](guides/testing-SFCs-with-mocha-webpack.md) - * [Использование с Vue Router](guides/using-with-vue-router.md) - * [Использование с Vuex](guides/using-with-vuex.md) - * [Тестирование асинхронной логики](guides/testing-async-components.md) -* [API](api/README.md) - * [mount](api/mount.md) - * [shallow](api/shallow.md) - * [Опции монтирования](api/options.md) - - [context](api/options.md#context) - - [slots](api/options.md#slots) - - [stubs](api/options.md#stubs) - - [mocks](api/options.md#mocks) - - [localVue](api/options.md#localvue) - - [attachToDocument](api/options.md#attachtodocument) - - [attrs](api/options.md#attrs) - - [listeners](api/options.md#listeners) - - [provide](api/options.md#provide) - - [другие опции](api/options.md#other-options) - * [Wrapper](api/wrapper/README.md) - * [attributes](api/wrapper/attributes.md) - * [classes](api/wrapper/classes.md) - * [contains](api/wrapper/contains.md) - * [emitted](api/wrapper/emitted.md) - * [emittedByOrder](api/wrapper/emittedByOrder.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper/destroy.md) - * [find](api/wrapper/find.md) - * [findAll](api/wrapper/findAll.md) - * [html](api/wrapper/html.md) - * [is](api/wrapper/is.md) - * [isEmpty](api/wrapper/isEmpty.md) - * [isVueInstance](api/wrapper/isVueInstance.md) - * [name](api/wrapper/name.md) - * [props](api/wrapper/props.md) - * [setComputed](api/wrapper/setComputed.md) - * [setData](api/wrapper/setData.md) - * [setMethods](api/wrapper/setMethods.md) - * [setProps](api/wrapper/setProps.md) - * [text](api/wrapper/text.md) - * [trigger](api/wrapper/trigger.md) - * [WrapperArray](api/wrapper-array/README.md) - * [at](api/wrapper-array/at.md) - * [contains](api/wrapper-array/contains.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper-array/destroy.md) - * [is](api/wrapper-array/is.md) - * [isEmpty](api/wrapper-array/isEmpty.md) - * [isVueInstance](api/wrapper-array/isVueInstance.md) - * [setComputed](api/wrapper-array/setComputed.md) - * [setData](api/wrapper-array/setData.md) - * [setMethods](api/wrapper-array/setMethods.md) - * [setProps](api/wrapper-array/setProps.md) - * [trigger](api/wrapper-array/trigger.md) - * [Компоненты](api/components/README.md) - * [TransitionStub](api/components/TransitionStub.md) - * [TransitionGroupStub](api/components/TransitionGroupStub.md) - * [Селекторы](api/selectors.md) - * [createLocalVue](api/createLocalVue.md) - * [Конфигурация](api/config.md) diff --git a/docs/ru/SUMMARY.md b/docs/ru/SUMMARY.md deleted file mode 100644 index f5e5a1b5b..000000000 --- a/docs/ru/SUMMARY.md +++ /dev/null @@ -1,66 +0,0 @@ -## Содержание - -* [Руководства](guides/README.md) - * [Введение](guides/getting-started.md) - * [Общие советы](guides/common-tips.md) - * [Мышь, клавиши и другие события DOM](guides/dom-events.md) - * [Чем запускать тесты](guides/choosing-a-test-runner.md) - * [Тестирование однофайловых компонентов с Jest](guides/testing-SFCs-with-jest.md) - * [Тестирование однофайловых компонентов с Mocha + webpack](guides/testing-SFCs-with-mocha-webpack.md) - * [Использование с Vue Router](guides/using-with-vue-router.md) - * [Использование с Vuex](guides/using-with-vuex.md) - * [Тестирование асинхронной логики](guides/testing-async-components.md) -* [API](api/README.md) - * [mount](api/mount.md) - * [shallow](api/shallow.md) - * [Опции монтирования](api/options.md) - - [context](api/options.md#context) - - [slots](api/options.md#slots) - - [stubs](api/options.md#stubs) - - [mocks](api/options.md#mocks) - - [localVue](api/options.md#localvue) - - [attachToDocument](api/options.md#attachtodocument) - - [attrs](api/options.md#attrs) - - [listeners](api/options.md#listeners) - - [provide](api/options.md#provide) - - [другие опции](api/options.md#other-options) - * [Wrapper](api/wrapper/README.md) - * [attributes](api/wrapper/attributes.md) - * [classes](api/wrapper/classes.md) - * [contains](api/wrapper/contains.md) - * [emitted](api/wrapper/emitted.md) - * [emittedByOrder](api/wrapper/emittedByOrder.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper/destroy.md) - * [find](api/wrapper/find.md) - * [findAll](api/wrapper/findAll.md) - * [html](api/wrapper/html.md) - * [is](api/wrapper/is.md) - * [isEmpty](api/wrapper/isEmpty.md) - * [isVueInstance](api/wrapper/isVueInstance.md) - * [name](api/wrapper/name.md) - * [props](api/wrapper/props.md) - * [setData](api/wrapper/setData.md) - * [setMethods](api/wrapper/setMethods.md) - * [setProps](api/wrapper/setProps.md) - * [text](api/wrapper/text.md) - * [trigger](api/wrapper/trigger.md) - * [WrapperArray](api/wrapper-array/README.md) - * [at](api/wrapper-array/at.md) - * [contains](api/wrapper-array/contains.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper-array/destroy.md) - * [is](api/wrapper-array/is.md) - * [isEmpty](api/wrapper-array/isEmpty.md) - * [isVueInstance](api/wrapper-array/isVueInstance.md) - * [setComputed](api/wrapper-array/setComputed.md) - * [setData](api/wrapper-array/setData.md) - * [setMethods](api/wrapper-array/setMethods.md) - * [setProps](api/wrapper-array/setProps.md) - * [trigger](api/wrapper-array/trigger.md) - * [Компоненты](api/components/README.md) - * [TransitionStub](api/components/TransitionStub.md) - * [TransitionGroupStub](api/components/TransitionGroupStub.md) - * [Селекторы](api/selectors.md) - * [createLocalVue](api/createLocalVue.md) - * [Конфигурация](api/config.md) diff --git a/docs/ru/api/README.md b/docs/ru/api/README.md deleted file mode 100644 index 85e1c030d..000000000 --- a/docs/ru/api/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# API - -* [mount](./mount.md) -* [shallow](./shallow.md) -* [Опции монтирования](./options.md) - - [context](./options.md#context) - - [slots](./options.md#slots) - - [stubs](./options.md#stubs) - - [mocks](./options.md#mocks) - - [localVue](./options.md#localvue) - - [attachToDocument](./options.md#attachtodocument) - - [attrs](./options.md#attrs) - - [listeners](./options.md#listeners) - - [provide](./options.md#provide) - - [другие опции](./options.md#other-options) -* [Wrapper](./wrapper/README.md) - * [attributes](./wrapper/attributes.md) - * [classes](./wrapper/classes.md) - * [contains](./wrapper/contains.md) - * [emitted](./wrapper/emitted.md) - * [emittedByOrder](./wrapper/emittedByOrder.md) - * [exists](./wrapper/exists.md) - * [destroy](./wrapper/destroy.md) - * [find](./wrapper/find.md) - * [findAll](./wrapper/findAll.md) - * [html](./wrapper/html.md) - * [is](./wrapper/is.md) - * [isEmpty](./wrapper/isEmpty.md) - * [isVueInstance](./wrapper/isVueInstance.md) - * [name](./wrapper/name.md) - * [props](./wrapper/props.md) - * [setComputed](./wrapper/setComputed.md) - * [setData](./wrapper/setData.md) - * [setMethods](./wrapper/setMethods.md) - * [setProps](./wrapper/setProps.md) - * [text](./wrapper/text.md) - * [trigger](./wrapper/trigger.md) -* [WrapperArray](./wrapper-array/README.md) - * [at](./wrapper-array/at.md) - * [contains](./wrapper-array/contains.md) - * [exists](./wrapper/exists.md) - * [destroy](./wrapper-array/destroy.md) - * [is](./wrapper-array/is.md) - * [isEmpty](./wrapper-array/isEmpty.md) - * [isVueInstance](./wrapper-array/isVueInstance.md) - * [setComputed](./wrapper-array/setComputed.md) - * [setData](./wrapper-array/setData.md) - * [setMethods](./wrapper-array/setMethods.md) - * [setProps](./wrapper-array/setProps.md) - * [trigger](./wrapper-array/trigger.md) -* [Компоненты](./components/README.md) - * [TransitionStub](./components/TransitionStub.md) - * [TransitionGroupStub](./components/TransitionGroupStub.md) -* [Селекторы](./selectors.md) -* [createLocalVue](./createLocalVue.md) -* [Конфигурация](./config.md) diff --git a/docs/ru/api/components/README.md b/docs/ru/api/components/README.md deleted file mode 100644 index 517cd1895..000000000 --- a/docs/ru/api/components/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Компоненты - -vue-test-utils включает утилиты, которые вы можете использовать для создания заглушек компонентов. - -[TransitionStub](./TransitionStub.md) и [TransitionGroupStub](./TransitionGroupStub.md) используются для создания заглушек компонентов `transition` и `transition-group` по умолчанию. Вы можете изменить эти заглушки отредактировав конфигурацию. \ No newline at end of file diff --git a/docs/ru/api/components/TransitionGroupStub.md b/docs/ru/api/components/TransitionGroupStub.md deleted file mode 100644 index b87fbaf29..000000000 --- a/docs/ru/api/components/TransitionGroupStub.md +++ /dev/null @@ -1,31 +0,0 @@ -# TransitionGroupStub - -Компонент для создания заглушки компонента `transition-group`. Вместо асинхронного выполнения переходов он возвращает дочерние компоненты синхронно. - -Это настроено на заглушку всех компонентов `transition-group` по умолчанию в конфигурации vue-test-utils. Чтобы использовать стандартный компонент `transition-group` установите `config.stubs['transition-group']` в значение false: - -```js -import { config } from '@vue/test-utils' - -config.stubs['transition-group'] = false -``` - -Чтобы переустановить обратно на заглушки компонентов `transition-group`: - -```js -import { config, TransitionGroupStub } from '@vue/test-utils' - -config.stubs['transition-group'] = TransitionGroupStub -``` - -Для установки заглушек в настройках монтирования: - -```js -import { mount, TransitionGroupStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - 'transition-group': TransitionGroupStub - } -}) -``` \ No newline at end of file diff --git a/docs/ru/api/components/TransitionStub.md b/docs/ru/api/components/TransitionStub.md deleted file mode 100644 index acd449851..000000000 --- a/docs/ru/api/components/TransitionStub.md +++ /dev/null @@ -1,30 +0,0 @@ -# TransitionStub - -Компонент для создания заглушки компонента `transition`. Вместо асинхронного выполнения переходов он возвращает дочерний компонент синхронно. - -Это настроено на заглушку всех компонентов `transition` по умолчанию в конфигурации vue-test-utils. Чтобы использовать стандартный компонент `transition` установите `config.stubs.transition` в значение false: - -```js -import { config } from '@vue/test-utils' - -config.stubs.transition = false -``` - -Чтобы переустановить обратно на заглушки компонентов `transition`: -```js -import { config, TransitionStub } from '@vue/test-utils' - -config.stubs.transition = TransitionStub -``` - -Для установки заглушек в настройках монтирования: - -```js -import { mount, TransitionStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - transition: TransitionStub - } -}) -``` \ No newline at end of file diff --git a/docs/ru/api/config.md b/docs/ru/api/config.md deleted file mode 100644 index bcaec9132..000000000 --- a/docs/ru/api/config.md +++ /dev/null @@ -1,26 +0,0 @@ -# Конфигурация - -vue-test-utils включает в себя объект конфигурации для определения опций, используемых vue-test-utils. - -## Конфигурация настроек `vue-test-utils` - -### `stubs` - -- Тип: `Object` -- По умолчанию: `{ - transition: TransitionStub, - 'transition-group': TransitionGroupStub -}` - -Заглушки указанные в `config.stubs` используются по умолчанию. -Заглушки, используемые в компонентах. Они перезаписываются значениями `stubs` переданными в настройках монтирования. - -При передаче `stubs` в качестве массива в настройках монтирования, `config.stubs` будет преобразована в массив, и будут создаваться компоненты заглушки с базовым компонентом, который возвращает div. - -Пример: - -```js -import VueTestUtils from '@vue/test-utils' - -VueTestUtils.config.stubs['my-component'] = '
' -``` \ No newline at end of file diff --git a/docs/ru/api/createLocalVue.md b/docs/ru/api/createLocalVue.md deleted file mode 100644 index 00e9117e0..000000000 --- a/docs/ru/api/createLocalVue.md +++ /dev/null @@ -1,27 +0,0 @@ -# `createLocalVue()` - -- **Возвращает:** - - `{Component}` - -- **Использование:** - -`createLocalVue` возвращает класс Vue, чтобы вы могли добавлять компоненты, примеси и устанавливать плагины без загрузнения глобального класса Vue. - -Используйте вместе с `options.localVue`: - -```js -import { createLocalVue, shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const localVue = createLocalVue() -const wrapper = shallow(Foo, { - localVue, - mocks: { foo: true } -}) -expect(wrapper.vm.foo).toBe(true) - -const freshWrapper = shallow(Foo) -expect(freshWrapper.vm.foo).toBe(false) -``` - -- **См. также:** [Общие советы](../guides/common-tips.md#applying-global-plugins-and-mixins) diff --git a/docs/ru/api/mount.md b/docs/ru/api/mount.md deleted file mode 100644 index 3717e9324..000000000 --- a/docs/ru/api/mount.md +++ /dev/null @@ -1,130 +0,0 @@ -# `mount(component [, options])` - -- **Принимает:** - - - `{Component} component` - - `{Object} options` - -- **Возвращает:** `{Wrapper}` - -- **Опции:** - -См. [опции монтирования](options.md) - -- **Использование:** - -Создаёт [`Wrapper`](wrapper/README.md), который содержит примонтированный и отрендеренный компонент Vue. - -**Без опций:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**С опциями Vue:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - propsData: { - color: 'red' - } - }) - expect(wrapper.props().color).toBe('red') - }) -}) -``` - -**Прикрепление к DOM:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - attachToDocument: true - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**Слот по умолчанию и именованные слоты:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import FooBar from './FooBar.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - slots: { - default: [Bar, FooBar], - fooBar: FooBar, // будет соответствовать `` - foo: '
' - } - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**Заглушки глобальных свойств:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const $route = { path: 'http://www.example-path.com' } - const wrapper = mount(Foo, { - mocks: { - $route - } - }) - expect(wrapper.vm.$route.path).toBe($route.path) - }) -}) -``` - -**Заглушки компонентов:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import Faz from './Faz.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = mount(Foo, { - stubs: { - Bar: '
', - BarFoo: true, - FooBar: Faz - } - }) - expect(wrapper.contains('.stubbed')).toBe(true) - expect(wrapper.contains(Bar)).toBe(true) - }) -}) -``` - -- **См. также:** [Wrapper](wrapper/README.md) diff --git a/docs/ru/api/options.md b/docs/ru/api/options.md deleted file mode 100644 index 9152c191c..000000000 --- a/docs/ru/api/options.md +++ /dev/null @@ -1,197 +0,0 @@ -# Опции монтирования - -Опции для `mount` и `shallow`. Объект опций может содержать как настройки монтирования `vue-test-utils`, так и сырые опции Vue. - -## Специальные опции монтирования `vue-test-utils` - -- [`context`](#context) -- [`slots`](#slots) -- [`stubs`](#stubs) -- [`mocks`](#mocks) -- [`localVue`](#localvue) -- [`attachToDocument`](#attachtodocument) -- [`attrs`](#attrs) -- [`listeners`](#listeners) -- [`provide`](#provide) - -### `context` - -- Тип: `Object` - -Передаёт контекст в функциональный компонент. Может использоваться только с функциональными компонентами. - -Пример: - -```js -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Component, { - context: { - props: { show: true }, - children: [Foo, Bar] - } -}) - -expect(wrapper.is(Component)).toBe(true) -``` - -### `slots` - -- Тип: `{ [name: string]: Array|Component|string }` - -Предоставляет объект с содержимым слотов компоненту. Ключ соответствует имени слота. Значение может быть компонентом, массивом компонентов или строковым шаблоном, или текстом. - -Пример: - -```js -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = shallow(Component, { - slots: { - default: [Foo, Bar], - fooBar: Foo, // будет соответствовать `` - foo: '
', - bar: 'bar' - } -}) -expect(wrapper.find('div')).toBe(true) -``` - -#### Передача текста - -Вы можете передать текст в `slots`. -Для этого есть одно ограничение. - -Это не поддерживается PhantomJS. -Используйте [Puppeteer](https://github.com/karma-runner/karma-chrome-launcher#headless-chromium-with-puppeteer). - -### `stubs` - -- Тип: `{ [name: string]: Component | boolean } | Array` - -Заглушки дочерних компонентов. Может быть массивом имен компонентов заменяемых заглушкой, или объектом. - -Пример: - -```js -import Foo from './Foo.vue' - -mount(Component, { - stubs: ['registered-component'] -}) - -shallow(Component, { - stubs: { - // заглушка со специальной реализацией - 'registered-component': Foo, - // создание обычной заглушки - 'another-component': true - } -}) -``` - -### `mocks` - -- Тип: `Object` - -Дополнительные свойства для экземпляра. Полезно при создании моков глобальных инъекций. - -Пример: - -```js -const $route = { path: 'http://www.example-path.com' } -const wrapper = shallow(Component, { - mocks: { - $route - } -}) -expect(wrapper.vm.$route.path).toBe($route.path) -``` - -### `localVue` - -- Тип: `Vue` - -Локальная копия Vue, созданная с помощью [`createLocalVue`](./createLocalVue.md) для использования при монтировании компонента. Установка плагинов на этой копии `Vue` предотвращает загрязнение оригинальной копии `Vue`. - -Пример: - -```js -import { createLocalVue, mount } from '@vue/test-utils' -import VueRouter from 'vue-router' -import Foo from './Foo.vue' - -const localVue = createLocalVue() -localVue.use(VueRouter) - -const routes = [ - { path: '/foo', component: Foo } -] - -const router = new VueRouter({ - routes -}) - -const wrapper = mount(Component, { - localVue, - router -}) -expect(wrapper.vm.$route).toBeInstanceOf(Object) -``` - -### `attachToDocument` - -- Тип: `boolean` -- По умолчанию: `false` - -Компонент будет прикрепляться к DOM при рендеринге, если установлено в `true`. - -### `attrs` - -- Тип: `Object` - -Устанавливает объект `$attrs` на экземпляре компонента. - -### `listeners` - -- Тип: `Object` - -Устанавливает объект `$listeners` на экземпляре компонента. - -### `provide` - -- Тип: `Object` - -Передаёт свойства в компоненты для использования в инъекциях. См. [provide/inject](https://ru.vuejs.org/v2/api/#provide-inject). - -## Другие опции - -Если в параметрах для `mount` и `shallow` содержатся другие опции, отличные от опций монтирования, опции компонента будут перезаписаны с помощью [extends](https://ru.vuejs.org/v2/api/#extends). - -```js -const Component = { - template: '
{{ foo() }}{{ bar() }}{{ baz() }}
', - methods: { - foo () { - return 'a' - }, - bar () { - return 'b' - } - } -} -const options = { - methods: { - bar () { - return 'B' - }, - baz () { - return 'C' - } - } -} -const wrapper = mount(Component, options) -expect(wrapper.text()).toBe('aBC') -``` \ No newline at end of file diff --git a/docs/ru/api/selectors.md b/docs/ru/api/selectors.md deleted file mode 100644 index 0c00a3032..000000000 --- a/docs/ru/api/selectors.md +++ /dev/null @@ -1,60 +0,0 @@ -# Селекторы - -Многие методы принимают селектор в качестве аргумента. Селектором может быть CSS селектор, компонент Vue или опция поиска объекта. - -## CSS селекторы - -Обрабатывают любой допустимый CSS селектор: - -- селекторы тегов (`div`, `foo`, `bar`) -- селекторы классов (`.foo`, `.bar`) -- селекторы атрибутов (`[foo]`, `[foo="bar"]`) -- селекторы id (`#foo`, `#bar`) -- селекторы псевдо-элементов (`div:first-of-type`) - -Вы также можете использовать комбинации: - -- выбор только непосредственных потомков (`div > #bar > .foo`) -- выбор элементов, являющихся потомками (`div #bar .foo`) -- селектор выбора соседа идущего за элементом (`div + .foo`) -- селектор выбора соседей идущих после элемента (`div ~ .foo`) - -## Компоненты Vue - -Компоненты Vue также являются допустимыми селекторами. - -```js -// Foo.vue - -export default { - name: 'FooComponent' -} -``` - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = shallow(Foo) -expect(wrapper.is(Foo)).toBe(true) -``` - -## Опция поиска объекта - -### Name - -Использование объекта для опции поиска, позволяет `vue-test-utils` выбирать элементы по `name` компонента на компонентах обёртках. - -```js -const buttonWrapper = wrapper.find({ name: 'my-button' }) -buttonWrapper.trigger('click') -``` - -### Ref - -Использование опции поиска объекта позволяет `vue-test-utils` выбирать элементы по `$ref` на компонентах обёрток. - -```js -const buttonWrapper = wrapper.find({ ref: 'myButton' }) -buttonWrapper.trigger('click') -``` diff --git a/docs/ru/api/shallow.md b/docs/ru/api/shallow.md deleted file mode 100644 index 4e9eb514f..000000000 --- a/docs/ru/api/shallow.md +++ /dev/null @@ -1,114 +0,0 @@ -# `shallow(component [, options])` - -- **Принимает:** - - - `{Component} component` - - `{Object} options` - - `{boolean} attachToDocument` - - `{Object} context` - - `{Array|Component} children` - - `{Object} slots` - - `{Array|Component|String} default` - - `{Array|Component|String} named` - - `{Object} mocks` - - `{Object|Array} stubs` - - `{Vue} localVue` - -- **Возвращает:** `{Wrapper}` - -- **Опции:** - -См. [опции монтирования](./options.md) - -- **Использование:** - -Аналогично [`mount`](mount.md), создаёт [`Wrapper`](wrapper/README.md), который содержит примонтированный и отрендеренный компонент Vue, но с заглушками вместо дочерних компонентов. - -**Без опций:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**С опциями Vue:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo, { - propsData: { - color: 'red' - } - }) - expect(wrapper.props().color).toBe('red') - }) -}) -``` - -**Прикрепление к DOM:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo, { - attachToDocument: true - }) - expect(wrapper.contains('div')).toBe(true) - }) -}) -``` - -**Слот по умолчанию и именованные слоты:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' -import FooBar from './FooBar.vue' - -describe('Foo', () => { - it('renders a div', () => { - const wrapper = shallow(Foo, { - slots: { - default: [Bar, FooBar], - fooBar: FooBar, // будет соответствовать , - foo: '
' - } - }) - expect(wrapper.find('div')).toBe(true) - }) -}) -``` - -**Заглушки глобальных свойств:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -describe('Foo', () => { - it('renders a div', () => { - const $route = { path: 'http://www.example-path.com' } - const wrapper = shallow(Foo, { - mocks: { - $route - } - }) - expect(wrapper.vm.$route.path).toBe($route.path) - }) -}) -``` diff --git a/docs/ru/api/wrapper-array/README.md b/docs/ru/api/wrapper-array/README.md deleted file mode 100644 index fa6a167c6..000000000 --- a/docs/ru/api/wrapper-array/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# WrapperArray - -`WrapperArray` — это объект, содержащий массив [`Wrappers`](../wrapper/README.md), и методы для тестирования `Wrappers`. - -- **Свойства:** - -`wrappers` `array`: массив `Wrappers` содержащихся в `WrapperArray` -`length` `number`: количество `Wrappers` содержащихся в `WrapperArray` - - - **Методы:** - -Подробный список методов можно изучить в разделе документации о `WrapperArray`. diff --git a/docs/ru/api/wrapper-array/at.md b/docs/ru/api/wrapper-array/at.md deleted file mode 100644 index ceb96c6fb..000000000 --- a/docs/ru/api/wrapper-array/at.md +++ /dev/null @@ -1,20 +0,0 @@ -# at(index) - -Возвращает `Wrapper` по указанному индексу `index`. Используется нумерация с нуля (т.е. первый элемент имеет индекс 0). - -- **Принимает:** - - `{number} index` - -- **Возвращает:** `{Wrapper}` - -- **Пример:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = shallow(Foo) -const divArray = wrapper.findAll('div') -const secondDiv = divArray.at(1) -expect(secondDiv.is('p')).toBe(true) -``` diff --git a/docs/ru/api/wrapper-array/contains.md b/docs/ru/api/wrapper-array/contains.md deleted file mode 100644 index eea3a3720..000000000 --- a/docs/ru/api/wrapper-array/contains.md +++ /dev/null @@ -1,23 +0,0 @@ -# contains(selector) - -Проверка, что каждый `Wrapper` в `WrapperArray` содержит указанный селектор. - -Используйте любой валидный [селектор](../selectors.md). - -- **Принимает:** - - `{string|Component} selector` - -- **Возвращает:** `{boolean}` - -- **Пример:** - -```js -import { shallow } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = shallow(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.contains('p')).toBe(true) -expect(divArray.contains(Bar)).toBe(true) -``` diff --git a/docs/ru/api/wrapper-array/destroy.md b/docs/ru/api/wrapper-array/destroy.md deleted file mode 100644 index aa544f3ca..000000000 --- a/docs/ru/api/wrapper-array/destroy.md +++ /dev/null @@ -1,16 +0,0 @@ -# destroy() - -Уничтожает каждый `Wrapper` Vue в `WrapperArray`. - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.contains('p')).toBe(true) -divArray.destroy() -expect(divArray.contains('p')).toBe(false) -``` \ No newline at end of file diff --git a/docs/ru/api/wrapper-array/is.md b/docs/ru/api/wrapper-array/is.md deleted file mode 100644 index 250f11536..000000000 --- a/docs/ru/api/wrapper-array/is.md +++ /dev/null @@ -1,19 +0,0 @@ -# is(selector) - -Проверка, что каждый `Wrapper` в `WrapperArray` DOM узле или `vm` соответствует [селектору](../selectors.md). - -- **Принимает:** - - `{string|Component} selector` - -- **Возвращает:** `{boolean}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.find('div') -expect(divArray.is('div')).toBe(true) -``` diff --git a/docs/ru/api/wrapper-array/isEmpty.md b/docs/ru/api/wrapper-array/isEmpty.md deleted file mode 100644 index d9f375a6e..000000000 --- a/docs/ru/api/wrapper-array/isEmpty.md +++ /dev/null @@ -1,16 +0,0 @@ -# isEmpty() - -Проверка, что каждый `Wrapper` в `WrapperArray` не содержит дочерних узлов. - -- **Возвращает:** `{boolean}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.isEmpty()).toBe(true) -``` diff --git a/docs/ru/api/wrapper-array/isVueInstance.md b/docs/ru/api/wrapper-array/isVueInstance.md deleted file mode 100644 index 0117a2bf0..000000000 --- a/docs/ru/api/wrapper-array/isVueInstance.md +++ /dev/null @@ -1,17 +0,0 @@ -# isVueInstance() - -Проверка, что каждый `Wrapper` в `WrapperArray` является экземпляром Vue. - -- **Возвращает:** `{boolean}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -expect(barArray.isVueInstance()).toBe(true) -``` diff --git a/docs/ru/api/wrapper-array/setComputed.md b/docs/ru/api/wrapper-array/setComputed.md deleted file mode 100644 index c84b3438d..000000000 --- a/docs/ru/api/wrapper-array/setComputed.md +++ /dev/null @@ -1,25 +0,0 @@ -# setComputed(computedObjects) - -Устанавливает для `Wrapper` `vm` вычисляемое свойство и принудительно обновляет каждый `Wrapper` в `WrapperArray`. - -**Каждый `Wrapper` должен содержать экземпляр Vue.** -**Каждый экземпляр Vue должен уже иметь вычисляемое свойство, переданные в `setComputed`.** - -- **Аргументы:** - - `{Object} вычисляемые свойства` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) - -barArray.setComputed({ - computed1: 'new-computed1', - computed2: 'new-computed2' -}) -``` \ No newline at end of file diff --git a/docs/ru/api/wrapper-array/setData.md b/docs/ru/api/wrapper-array/setData.md deleted file mode 100644 index 557e22960..000000000 --- a/docs/ru/api/wrapper-array/setData.md +++ /dev/null @@ -1,21 +0,0 @@ -# setData(data) - -Устанавливает данные `Wrapper` `vm` и выполняет принудительное обновление каждого `Wrapper` в `WrapperArray`. - -**Обратите внимание, что каждый `Wrapper` должен содержать экземпляр Vue.** - -- **Принимает:** - - `{Object} data` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -barArray.setData({ foo: 'bar' }) -expect(barArray.at(0).vm.foo).toBe('bar') -``` diff --git a/docs/ru/api/wrapper-array/setMethods.md b/docs/ru/api/wrapper-array/setMethods.md deleted file mode 100644 index c5a128055..000000000 --- a/docs/ru/api/wrapper-array/setMethods.md +++ /dev/null @@ -1,26 +0,0 @@ - -# setMethods(methods) - -Устанавливает методы `Wrapper` `vm` и выполняет принудительное обновление каждого `Wrapper` в `WrapperArray`. - -**Обратите внимание, что каждый `Wrapper` должен содержать экземпляр Vue.** - -- **Принимает:** - - `{Object} methods` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -const clickMethodStub = sinon.stub() - -barArray.setMethods({ clickMethod: clickMethodStub }) -barArray.at(0).trigger('click') -expect(clickMethodStub.called).toBe(true) -``` diff --git a/docs/ru/api/wrapper-array/setProps.md b/docs/ru/api/wrapper-array/setProps.md deleted file mode 100644 index e5b3751c4..000000000 --- a/docs/ru/api/wrapper-array/setProps.md +++ /dev/null @@ -1,21 +0,0 @@ -# setProps(props) - -Устанавливает входные параметры `Wrapper` `vm` и выполняет принудительное обновление каждого `Wrapper` в `WrapperArray`. - -**Обратите внимание, что каждый `Wrapper` должен содержать экземпляр Vue.** - -- **Принимает:** - - `{Object} props` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -barArray.setProps({ foo: 'bar' }) -expect(barArray.at(0).vm.foo).toBe('bar') -``` diff --git a/docs/ru/api/wrapper-array/trigger.md b/docs/ru/api/wrapper-array/trigger.md deleted file mode 100644 index 593c8d37a..000000000 --- a/docs/ru/api/wrapper-array/trigger.md +++ /dev/null @@ -1,25 +0,0 @@ -# trigger(eventName) - -Генерирует событие на каждом `Wrapper` в `WrapperArray` DOM узле. - -**Обратите внимание, что каждый `Wrapper` должен содержать экземпляр Vue.** - -- **Принимает:** - - `{string} eventName` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' - -const clickHandler = sinon.stub() -const wrapper = mount(Foo, { - propsData: { clickHandler } -}) - -const divArray = wrapper.findAll('div') -divArray.trigger('click') -expect(clickHandler.called).toBe(true) -``` diff --git a/docs/ru/api/wrapper/README.md b/docs/ru/api/wrapper/README.md deleted file mode 100644 index 4a6b6b44d..000000000 --- a/docs/ru/api/wrapper/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# `Wrapper` - -`vue-test-utils` — это API основанное на использовании обёрток (wrapper). - -`Wrapper` — это объект, который содержит примонтированный компонент или VNode и методы для тестирования компонента или VNnode. - -- **Свойства:** - -`vm` `Component`: это экземпляр `Vue`. Вы можете получить доступ ко всем [методам и свойствам экземпляра](https://ru.vuejs.org/v2/api/index.html#Опции-—-данные) через `wrapper.vm`. Это существует только в обёртках для компонентов Vue -`element` `HTMLElement`: корневой DOM-узел обёртки -`options` `Object`: Объект содержащий опции `vue-test-utils`, передаваемые в `mount` или `shallow` -`options.attachedToDom` `Boolean`: `true` если был передан `attachToDom` в `mount` или `shallow` - -- **Методы:** - -Подробный список методов можно изучить в разделе документации про wrapper. diff --git a/docs/ru/api/wrapper/attributes.md b/docs/ru/api/wrapper/attributes.md deleted file mode 100644 index 04a5990a8..000000000 --- a/docs/ru/api/wrapper/attributes.md +++ /dev/null @@ -1,15 +0,0 @@ -# attributes() - -Возвращает объект атрибутов DOM-узла `Wrapper`. - -- **Возвращает:** `{[attribute: string]: any}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.attributes().id).toBe('foo') -``` \ No newline at end of file diff --git a/docs/ru/api/wrapper/classes.md b/docs/ru/api/wrapper/classes.md deleted file mode 100644 index 4da728cbf..000000000 --- a/docs/ru/api/wrapper/classes.md +++ /dev/null @@ -1,17 +0,0 @@ -# classes() - -Возвращает классы DOM-узла `Wrapper`. - -Возвращает массив имён классов. - -- **Возвращает:** `Array<{string}>` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.classes()).toContain('bar') -``` \ No newline at end of file diff --git a/docs/ru/api/wrapper/contains.md b/docs/ru/api/wrapper/contains.md deleted file mode 100644 index 064ae3bcc..000000000 --- a/docs/ru/api/wrapper/contains.md +++ /dev/null @@ -1,22 +0,0 @@ -# `contains(selector)` - -Проверка, что `Wrapper` содержит элемент или компонент, соответствующий [селектору](../selectors.md). - -- **Принимает:** - - `{string|Component} selector` - -- **Возвращает:** `{boolean}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -expect(wrapper.contains('p')).toBe(true) -expect(wrapper.contains(Bar)).toBe(true) -``` - -- **См. также:** [Селекторы](../selectors.md) diff --git a/docs/ru/api/wrapper/destroy.md b/docs/ru/api/wrapper/destroy.md deleted file mode 100644 index 9eb06baa3..000000000 --- a/docs/ru/api/wrapper/destroy.md +++ /dev/null @@ -1,19 +0,0 @@ -# destroy() - -Уничтожает экземпляр компонента Vue. - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' - -const spy = sinon.stub() -mount({ - render: null, - destroyed () { - spy() - } -}).destroy() -expect(spy.calledOnce).toBe(true) -``` \ No newline at end of file diff --git a/docs/ru/api/wrapper/emitted.md b/docs/ru/api/wrapper/emitted.md deleted file mode 100644 index 97ab6f327..000000000 --- a/docs/ru/api/wrapper/emitted.md +++ /dev/null @@ -1,57 +0,0 @@ -# emitted() - -Возвращает объект, содержащий вызванные пользовательские события в `Wrapper` `vm`. - -- **Возвращает:** `{ [name: string]: Array> }` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' - -const wrapper = mount(Component) - -wrapper.vm.$emit('foo') -wrapper.vm.$emit('foo', 123) - -/* -wrapper.emitted() возвращает следующий объект: -{ - foo: [[], [123]] -} -*/ - -// проверка, что событие было вызвано -expect(wrapper.emitted().foo).toBeTruthy() - -// проверка, что событие вызывалось определённое число раз -expect(wrapper.emitted().foo.length).toBe(2) - -// проверка, что с событием были переданы определённые данные -expect(wrapper.emitted().foo[1]).toEqual([123]) -``` - -Вы также можете написать это так: - -```js -// проверка, что событие было вызвано -expect(wrapper.emitted('foo')).toBeTruthy() - -// проверка, что событие вызывалось определённое число раз -expect(wrapper.emitted('foo').length).toBe(2) - -// проверка, что с событием были переданы определённые данные -expect(wrapper.emitted('foo')[1]).toEqual([123]) -``` - -Метод `.emitted()`, когда он вызывается, каждый раз возвращает тот же объект, а не новый, поэтому объект будет обновляться при генерации новых событий: - -```js -const emitted = wrapper.emitted() - -expect(emitted.foo.length).toBe(1) - -// делаем что-то, что заставляет `wrapper` сгенерировать событие "foo" - -expect(emitted.foo.length).toBe(2) -``` \ No newline at end of file diff --git a/docs/ru/api/wrapper/emittedByOrder.md b/docs/ru/api/wrapper/emittedByOrder.md deleted file mode 100644 index fc0820ad3..000000000 --- a/docs/ru/api/wrapper/emittedByOrder.md +++ /dev/null @@ -1,27 +0,0 @@ -# emittedByOrder() - -Возвращает массив, содержащий вызванные пользовательские события в `Wrapper` `vm`. - -- **Возвращает:** `Array<{ name: string, args: Array }>` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' - -const wrapper = mount(Component) - -wrapper.vm.$emit('foo') -wrapper.vm.$emit('bar', 123) - -/* -wrapper.emittedByOrder() возвращает следующий массив: -[ - { name: 'foo', args: [] }, - { name: 'bar', args: [123] } -] -*/ - -// проверка, что события были вызваны в определённом порядке -expect(wrapper.emittedByOrder().map(e => e.name)).toEqual(['foo', 'bar']) -``` diff --git a/docs/ru/api/wrapper/exists.md b/docs/ru/api/wrapper/exists.md deleted file mode 100644 index ca56c4e53..000000000 --- a/docs/ru/api/wrapper/exists.md +++ /dev/null @@ -1,20 +0,0 @@ -# exists() - -Проверка, что `Wrapper` или `WrapperArray` существует. - -Возвращает `false` если вызывается на пустом `Wrapper` или `WrapperArray`. - -- **Возвращает:** `{boolean}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.exists()).toBe(true) -expect(wrapper.find('does-not-exist').exists()).toBe(false) -expect(wrapper.findAll('div').exists()).toBe(true) -expect(wrapper.findAll('does-not-exist').exists()).toBe(false) -``` diff --git a/docs/ru/api/wrapper/find.md b/docs/ru/api/wrapper/find.md deleted file mode 100644 index 8f5df5cdc..000000000 --- a/docs/ru/api/wrapper/find.md +++ /dev/null @@ -1,26 +0,0 @@ -# find(selector) - -Возвращает [`Wrapper`](README.md) первого DOM узла или компонента Vue, соответствующий селектору. - -Используйте любой валидный [селектор](../selectors.md). - -- **Принимает:** - - `{string|Component} selector` - -- **Возвращает:** `{Wrapper}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const div = wrapper.find('div') -expect(div.is('div')).toBe(true) -const bar = wrapper.find(Bar) -expect(bar.is(Bar)).toBe(true) -``` - -- **См. также:** [Wrapper](README.md) diff --git a/docs/ru/api/wrapper/findAll.md b/docs/ru/api/wrapper/findAll.md deleted file mode 100644 index a6b69715a..000000000 --- a/docs/ru/api/wrapper/findAll.md +++ /dev/null @@ -1,26 +0,0 @@ -# findAll(selector) - -Возвращает [`WrapperArray`](../wrapper-array/README.md), состоящий из [Wrappers](README.md). - -Используйте любой валидный [селектор](../selectors.md). - -- **Принимает:** - - `{string|Component} selector` - -- **Возвращает:** `{WrapperArray}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const div = wrapper.findAll('div').at(0) -expect(div.is('div')).toBe(true) -const bar = wrapper.findAll(Bar).at(0) -expect(bar.is(Bar)).toBe(true) -``` - -- **См. также:** [Wrapper](README.md) diff --git a/docs/ru/api/wrapper/html.md b/docs/ru/api/wrapper/html.md deleted file mode 100644 index bfe5031ee..000000000 --- a/docs/ru/api/wrapper/html.md +++ /dev/null @@ -1,15 +0,0 @@ -# html() - -Возвращает HTML `Wrapper` DOM узла в виде строки. - -- **Возвращает:** `{string}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.html()).toBe('

Foo

') -``` diff --git a/docs/ru/api/wrapper/is.md b/docs/ru/api/wrapper/is.md deleted file mode 100644 index 06f6141e3..000000000 --- a/docs/ru/api/wrapper/is.md +++ /dev/null @@ -1,18 +0,0 @@ -# is(selector) - -Проверяет, что DOM-элемент `Wrapper` или `vm` соответствуют [селектору](../selectors.md). - -- **Принимает:** - - `{string|Component} selector` - -- **Возвращает:** `{boolean}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.is('div')).toBe(true) -``` diff --git a/docs/ru/api/wrapper/isEmpty.md b/docs/ru/api/wrapper/isEmpty.md deleted file mode 100644 index 908de15c9..000000000 --- a/docs/ru/api/wrapper/isEmpty.md +++ /dev/null @@ -1,15 +0,0 @@ -# isEmpty() - -Проверяет, что `Wrapper` не содержит дочерних узлов. - -- **Возвращает:** `{boolean}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.isEmpty()).toBe(true) -``` diff --git a/docs/ru/api/wrapper/isVueInstance.md b/docs/ru/api/wrapper/isVueInstance.md deleted file mode 100644 index fe83892e0..000000000 --- a/docs/ru/api/wrapper/isVueInstance.md +++ /dev/null @@ -1,15 +0,0 @@ -# isVueInstance() - -Проверка, что `Wrapper` является экземпляром Vue. - -- **Возвращает:** `{boolean}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.isVueInstance()).toBe(true) -``` diff --git a/docs/ru/api/wrapper/name.md b/docs/ru/api/wrapper/name.md deleted file mode 100644 index 4a46d21e8..000000000 --- a/docs/ru/api/wrapper/name.md +++ /dev/null @@ -1,17 +0,0 @@ -# name() - -Возвращает имя компонента, если `Wrapper` содержит экземпляр Vue, или имя тега DOM-узла `Wrapper` если `Wrapper` не содержит экземпляра Vue. - -- **Возвращает:** `{string}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.name()).toBe('Foo') -const p = wrapper.find('p') -expect(p.name()).toBe('p') -``` diff --git a/docs/ru/api/wrapper/props.md b/docs/ru/api/wrapper/props.md deleted file mode 100644 index 827606ee2..000000000 --- a/docs/ru/api/wrapper/props.md +++ /dev/null @@ -1,21 +0,0 @@ -# props() - -Возвращает объект с входными параметрами `vm` для `Wrapper`. - -**Обратите внимание что Wrapper должен содержать экземпляр Vue.** - -- **Возвращает:** `{[prop: string]: any}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo, { - propsData: { - bar: 'baz' - } -}) -expect(wrapper.props().bar).toBe('baz') -``` \ No newline at end of file diff --git a/docs/ru/api/wrapper/setData.md b/docs/ru/api/wrapper/setData.md deleted file mode 100644 index f5e9f76bc..000000000 --- a/docs/ru/api/wrapper/setData.md +++ /dev/null @@ -1,19 +0,0 @@ -# setData(data) - -Устанавливает данные `Wrapper` `vm` и выполняет принудительное обновление. - -**Обратите внимание, что `Wrapper` должен содержать экземпляр Vue.** - -- **Принимает:** - - `{Object} data` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -wrapper.setData({ foo: 'bar' }) -expect(wrapper.vm.foo).toBe('bar') -``` diff --git a/docs/ru/api/wrapper/setMethods.md b/docs/ru/api/wrapper/setMethods.md deleted file mode 100644 index 8bc728dfe..000000000 --- a/docs/ru/api/wrapper/setMethods.md +++ /dev/null @@ -1,23 +0,0 @@ -# setMethods(methods) - -Устанавливает методы `Wrapper` `vm` и выполняет принудительное обновление. - -**Обратите внимание, что `Wrapper` должен содержать экземпляр Vue.** - -- **Принимает:** - - `{Object} methods` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const clickMethodStub = sinon.stub() - -wrapper.setMethods({ clickMethod: clickMethodStub }) -wrapper.find('button').trigger('click') -expect(clickMethodStub.called).toBe(true) -``` diff --git a/docs/ru/api/wrapper/setProps.md b/docs/ru/api/wrapper/setProps.md deleted file mode 100644 index 31d2db8fa..000000000 --- a/docs/ru/api/wrapper/setProps.md +++ /dev/null @@ -1,46 +0,0 @@ -# setProps(props) - -- **Принимает:** - - `{Object} props` - -- **Использование:** - -Устанавливает входные параметры `Wrapper` `vm` и выполняет принудительное обновление. - -**Обратите внимание, что `Wrapper` должен содержать экземпляр Vue.** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -wrapper.setProps({ foo: 'bar' }) -expect(wrapper.vm.foo).toBe('bar') -``` - -Вы также можете передать объект `propsData`, который инициализирует экземпляр Vue с переданными значениями. - -``` js -// Foo.vue -export default { - props: { - foo: { - type: String, - required: true - } - } -} -``` - -``` js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo, { - propsData: { - foo: 'bar' - } -}) - -expect(wrapper.vm.foo).toBe('bar') -``` \ No newline at end of file diff --git a/docs/ru/api/wrapper/text.md b/docs/ru/api/wrapper/text.md deleted file mode 100644 index f62ba500f..000000000 --- a/docs/ru/api/wrapper/text.md +++ /dev/null @@ -1,15 +0,0 @@ -# text() - -Возвращает текстовое содержимое `Wrapper`. - -- **Возвращает:** `{string}` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.text()).toBe('bar') -``` diff --git a/docs/ru/api/wrapper/trigger.md b/docs/ru/api/wrapper/trigger.md deleted file mode 100644 index f2199dca3..000000000 --- a/docs/ru/api/wrapper/trigger.md +++ /dev/null @@ -1,44 +0,0 @@ -# trigger(eventName) - -Вызывает событие на `Wrapper` DOM узле. - -В `trigger` также можно передать опциональный объект `options`. Свойства объекта `options` будут добавлены к Event. - -- **Принимает:** - - `{string} eventName` - - `{Object} options` - -- **Пример:** - -```js -import { mount } from '@vue/test-utils' -import sinon from 'sinon' -import Foo from './Foo' - -const clickHandler = sinon.stub() -const wrapper = mount(Foo, { - propsData: { clickHandler } -}) - -wrapper.trigger('click') - -wrapper.trigger('click', { - button: 0 -}) - -expect(clickHandler.called).toBe(true) -``` - -- **Установка target для event:** - -Под капотом, `trigger` создаёт объект `Event` и вызывает событие на элементе Wrapper. - -Невозможно изменить значение `target` объекта `Event`, поэтому вы не можете установить `target` в объекте опций. - -Чтобы добавить атрибут к `target`, вам нужно установить значение элемента Wrapper перед вызовом `trigger`. Вы можете сделать это с помощью свойства `element`. - -```js -const input = wrapper.find('input') -input.element.value = 100 -input.trigger('click') -``` \ No newline at end of file diff --git a/docs/ru/guides/README.md b/docs/ru/guides/README.md deleted file mode 100644 index ac385ad92..000000000 --- a/docs/ru/guides/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Руководства - -* [Введение](./getting-started.md) -* [Общие советы](./common-tips.md) -* [Мышь, клавиши и другие события DOM](./dom-events.md) -* [Чем запускать тесты](./choosing-a-test-runner.md) -* [Тестирование однофайловых компонентов с Jest](./testing-SFCs-with-jest.md) -* [Тестирование однофайловых компонентов с Mocha + webpack](./testing-SFCs-with-mocha-webpack.md) -* [Использование с Vue Router](./using-with-vue-router.md) -* [Использование с Vuex](./using-with-vuex.md) diff --git a/docs/ru/guides/choosing-a-test-runner.md b/docs/ru/guides/choosing-a-test-runner.md deleted file mode 100644 index 0f59de271..000000000 --- a/docs/ru/guides/choosing-a-test-runner.md +++ /dev/null @@ -1,46 +0,0 @@ -# Чем запускать тесты - -Test runner — это программа, которая запускает тесты. - -Есть много популярных программ запуска тестов для JavaScript, и `vue-test-utils` работает с любой из них. Нет зависимости от используемого test runner. - -Есть несколько вещей, которые следует учитывать при выборе программы запуска тестов: набор функций, производительность и поддержка предварительной компиляции однофайловых компонентов. После тщательного сравнения существующих библиотек мы рекомендуем два варианта конфигурации: - -- [Jest](https://facebook.github.io/jest/docs/en/getting-started.html#content) наиболее функциональный способ запуска тестов. Он меньше всех требует конфигурирования, устанавливает JSDOM по умолчанию, предоставляет встроенные проверки (assertions) и имеет отличный интерфейс для работы через командную строку. Тем не менее, вам понадобится пре-процессор, чтобы иметь возможность импортировать однофайловые компоненты в свои тесты. Мы создали пре-процессор `vue-jest`, который может обрабатывать наиболее распространённые функции однофайловых компонентов, но в настоящее время он не имеет 100% паритетности функций с `vue-loader`. - -- [mocha-webpack](https://github.com/zinserjan/mocha-webpack) — это обёртка вокруг webpack + Mocha, но с более оптимизированным интерфейсом и режимом отслеживания. Преимущества этой конфигурации в том, что мы можем получить полную поддержку однофайловых компонентов с помощью webpack + `vue-loader`, но для этого требуется больше настройки. - -## Браузерное окружение - -`vue-test-utils` полагается на браузерное окружение. Технически вы можете запустить его в реальном браузере, но это не рекомендуется из-за сложности запуска реальных браузеров на разных платформах. Вместо этого мы рекомендуем запускать тесты в Node с виртуальным браузерным окружением, реализуемым с помощью [JSDOM](https://github.com/tmpvar/jsdom). - -Jest настраивает JSDOM автоматически. Для других программ запуска тестов вы можете вручную настроить JSDOM для тестов с помощью [jsdom-global](https://github.com/rstacruz/jsdom-global) в записи для ваших тестов: - -``` bash -npm install --save-dev jsdom jsdom-global -``` ---- -``` js -// в настройке теста / entry -require('jsdom-global')() -``` - -## Тестирование однофайловых компонентов - -Однофайловые компоненты Vue требуют предварительной компиляции, прежде чем могут быть запущены в Node или в браузере. Существует два рекомендуемых способа выполнения компиляции: с пре-процессором Jest, или непосредственно с помощью webpack. - -Пре-процессор `vue-jest` поддерживает базовую функциональность однофайловых компонентов, но в настоящее время не обрабатывает блоки стилей или пользовательские блоки, которые поддерживаются только в `vue-loader`. Если вы полагаетесь на эти функции или другие конфигурации, специфичные для webpack, вам нужно будет использовать связку webpack + `vue-loader`. - -Изучите следующие руководства по вариантам настройки: - -- [Тестирование однофайловых компонентов с Jest](./testing-SFCs-with-jest.md) -- [Тестирование однофайловых компонентов с Mocha + webpack](./testing-SFCs-with-mocha-webpack.md) - -## Дополнительные ресурсы - -- [Сравнение производительностей программ для запуска тестов](https://github.com/eddyerburgh/vue-unit-test-perf-comparison) -- [Пример проекта с Jest](https://github.com/vuejs/vue-test-utils-jest-example) -- [Пример проекта с Mocha](https://github.com/vuejs/vue-test-utils-mocha-webpack-example) -- [Пример проекта с tape](https://github.com/eddyerburgh/vue-test-utils-tape-example) -- [Пример проекта с AVA](https://github.com/eddyerburgh/vue-test-utils-ava-example) -- [tyu — Восхитительное веб-тестирование от egoist](https://github.com/egoist/tyu) \ No newline at end of file diff --git a/docs/ru/guides/common-tips.md b/docs/ru/guides/common-tips.md deleted file mode 100644 index 173ffd9af..000000000 --- a/docs/ru/guides/common-tips.md +++ /dev/null @@ -1,135 +0,0 @@ -# Общие советы - -## Понимание что тестировать - -Для компонентов пользовательского интерфейса мы не рекомендуем стремиться к покрытию каждой строки кода, поскольку это приводит к слишком большому фокусу на деталях внутренней реализации компонентов и может привести к созданию хрупких тестов. - -Вместо этого, мы рекомендуем писать тесты, которые проверяют ваш публичный интерфейс взаимодействия с компонентом и относиться к его внутренностям как к чёрному ящику. Один тестовый пример должен проверять, что некоторые входные данные (взаимодействие пользователя или изменение входных параметров), предоставляемые компоненту будут приводить к ожидаемому результату (результату рендеринга или вызванным пользовательским событиям). - -Например, для компонента `Counter`, который при каждом нажатии кнопки будет увеличивать отображаемый счётчик на 1, может тестироваться с помощью симуляции клика и проверке, что в отрендренном результате значение будет увеличено на 1. Тест не заботится о том, каким образом `Counter` увеличивает значение, он сосредоточен только на входных данных и результате. - -Преимуществом этого подхода в том, что до тех пор пока интерфейс вашего компонента остаётся прежним, ваши тесты будут проходить независимо от того, как будет меняться внутренняя реализация компонента с течением времени. - -Эта тема обсуждается более подробно в [отличной презентации Matt O'Connell](http://slides.com/mattoconnell/deck#/). - -## Поверхностный рендеринг - -В модульных тестах мы обычно хотим сосредоточиться на тестируемом компоненте, как на изолированном блоке и избежать неявной проверки поведения его дочерних компонентов. - -Кроме того, для компонентов, которые содержат много дочерних компонентов, отрендеренное дерево целиком может стать очень большим. Повторяющийся рендеринг всех дочерних компонентов может замедлить наши тесты. - -`vue-test-utils` позволяет вам монтировать компонент без рендеринга его дочерних компонентов (заменяя их заглушками) с помощью метода `shallow`: - -```js -import { shallow } from '@vue/test-utils' - -const wrapper = shallow(Component) // возвращает Wrapper, содержащий примонтированный экземпляр компонента -wrapper.vm // примонтированный экземпляр Vue -``` - -## Проверка вызванных событий - -Каждая примонтированная обёртка автоматически записывает все события, вызванные на экземпляре Vue. Вы можете получить записанные события с помощью метода `wrapper.emitted()`: - -``` js -wrapper.vm.$emit('foo') -wrapper.vm.$emit('foo', 123) - -/* -`wrapper.emitted()` возвращает указанный объект: -{ - foo: [[], [123]] -} -*/ -``` - -Затем вы можете добавить проверки на основе этих данных: - -``` js -// проверка, что событие было вызвано -expect(wrapper.emitted().foo).toBeTruthy() - -// проверка, что событие вызывалось определённое число раз -expect(wrapper.emitted().foo.length).toBe(2) - -// проверка, что с событием были переданы определённые данные -expect(wrapper.emitted().foo[1]).toEqual([123]) -``` - -Вы также можете получить массив событий в порядке их вызова с помощью [`wrapper.emittedByOrder()`](../api/wrapper/emittedByOrder.md). - -## Манипулирование состоянием компонента - -Вы можете напрямую манипулировать состоянием компонента с помощью методов `setData` или `setProps` на обёртке: - -```js -wrapper.setData({ count: 10 }) - -wrapper.setProps({ foo: 'bar' }) -``` - -## Моки входных параметров - -Вы можете передать входные параметры в компонент с использованием встроенной во Vue опции `propsData`: - -```js -import { mount } from '@vue/test-utils' - -mount(Component, { - propsData: { - aProp: 'some value' - } -}) -``` - -Вы также можете обновить входные параметры на уже примонтированном компоненте с помощью метода `wrapper.setProps({})`. - -*Полный список опции можно посмотреть в [секции настроек монтирования](../api/options.md) документации.* - -## Добавление глобальных плагинов и примесей - -Некоторые из компонентов могут полагаться на функции, добавляемые глобальным плагином или примесью, к примеру `vuex` и `vue-router`. - -Если вы пишете тесты для компонентов определённого приложения, вы можете настроить одни и те же глобальные плагины и примеси один раз перед началом ваших тестов. Но в некоторых случаях, например при тестировании набора общих компонентов, которые могут использоваться в разных приложениях, гораздо лучше протестировать ваши компоненты в более изолированной конфигурации, без загрязнения глобального конструктора `Vue`. Мы можем использовать метод [`createLocalVue`](../api/createLocalVue.md) для достижения этого: - -``` js -import { createLocalVue } from '@vue/test-utils' - -// создаём расширенный конструктор `Vue` -const localVue = createLocalVue() - -// устанавливаем плагины как обычно -localVue.use(MyPlugin) - -// передаём `localVue` в настройки монтирования -mount(Component, { - localVue -}) -``` - -**Обратите внимание, что некоторые плагины, такие как Vue Router, добавляют свойства только для чтения к глобальному конструктору Vue. Это делает невозможным переустановку плагина на конструкторе localVue или добавление моков для этих свойств** - -## Создание моков инъекций - -Другая стратегия для инъекции входных параметров — просто создание их моков. Вы можете это сделать с помощью опции `mocks`: - -```js -import { mount } from '@vue/test-utils' - -const $route = { - path: '/', - hash: '', - params: { id: '123' }, - query: { q: 'hello' } -} - -mount(Component, { - mocks: { - $route // добавление мока объекта `$route` в экземпляр Vue перед монтированием компонента - } -}) -``` - -## Работа с маршрутизацией - -Поскольку маршрутизация по определению имеет отношение к общей структуре приложения и включает в себя несколько компонентов, её лучше всего тестировать с помощью интеграционных или end-to-end тестов. Для отдельных компонентов, которые используют возможности `vue-router`, вы можете создать моки с использованием упомянутых выше методов. diff --git a/docs/ru/guides/dom-events.md b/docs/ru/guides/dom-events.md deleted file mode 100644 index b2751bc49..000000000 --- a/docs/ru/guides/dom-events.md +++ /dev/null @@ -1,210 +0,0 @@ -# Тестирование нажатий клавиш, мыши и других событий DOM - -## Генерация событий - -`Wrapper` предоставляет метод `trigger`. Его можно использовать для генерации событий DOM. - -```js -const wrapper = mount(MyButton) - -wrapper.trigger('click') -``` - -Вы должны помнить, что метод `find` также возвращает `Wrapper`. Предполагается, что `MyComponent` содержит кнопку, а следующий код нажимает эту кнопку. - -```js -const wrapper = mount(MyComponent) - -wrapper.find('button').trigger('click') -``` - -## Опции - -Метод `trigger` также может опционально принимать объект `options`. Свойства объекта `options` добавятся к Event. - -```js -const wrapper = mount(MyButton) - -wrapper.trigger('click', { button: 0 }) -``` - - -## Пример тестирования кнопки мыши - -**Тестируемый компонент** - -```html - - - -``` - -**Тест** - -```js -import YesNoComponent from '@/components/YesNoComponent' -import { mount } from '@vue/test-utils' -import sinon from 'sinon' - -describe('Click event', () => { - it('Нажатие на кнопке yes вызывает наш метод с аргументом "yes"', () => { - const spy = sinon.spy() - const wrapper = mount(YesNoComponent, { - propsData: { - callMe: spy - } - }) - wrapper.find('button.yes').trigger('click') - - spy.should.have.been.calledWith('yes') - }) -}) -``` - -## Пример тестирования клавиши - -**Тестируемый компонент** - -Этот компонент позволяет увеличивать/уменьшать количество с помощью различных клавиш. - -```html - - - -``` - -**Тест** - -```js -import QuantityComponent from '@/components/QuantityComponent' -import { mount } from '@vue/test-utils' - -describe('Тестирование событий клавиш', () => { - it('Quantity по умолчанию равно нулю', () => { - const wrapper = mount(QuantityComponent) - expect(wrapper.vm.quantity).toBe(0) - }) - - it('Клавиша вверх устанавливает quantity равным 1', () => { - const wrapper = mount(QuantityComponent) - wrapper.trigger('keydown.up') - expect(wrapper.vm.quantity).toBe(1) - }) - - it('Клавиша вниз уменьшает quantity на 1', () => { - const wrapper = mount(QuantityComponent) - wrapper.vm.quantity = 5 - wrapper.trigger('keydown.down') - expect(wrapper.vm.quantity).toBe(4) - }) - - it('Escape устанавливает quantity равным 0', () => { - const wrapper = mount(QuantityComponent) - wrapper.vm.quantity = 5 - wrapper.trigger('keydown.esc') - expect(wrapper.vm.quantity).toBe(0) - }) - - it('Магический символ "a" устанавливает quantity равным 13', () => { - const wrapper = mount(QuantityComponent) - wrapper.trigger('keydown', { - which: 65 - }) - expect(wrapper.vm.quantity).toBe(13) - }) -}) - -``` - -**Ограничения** - -Имя модификатора после точки `keydown.up` преобразуется в `keyCode`. Это поддерживается для следующих имён: - -| key name | key code | -| --- | --- | -| enter | 13 | -| esc | 27 | -| tab | 9 | -| space | 32 | -| delete | 46 | -| backspace | 8 | -| insert | 45 | -| up | 38 | -| down | 40 | -| left | 37 | -| right | 39 | -| end | 35 | -| home | 36 | -| pageup | 33 | -| pagedown | 34 | - -## Важно - -`vue-test-utils` генерирует событие синхронно. Следовательно, `Vue.nextTick` не требуется. diff --git a/docs/ru/guides/getting-started.md b/docs/ru/guides/getting-started.md deleted file mode 100644 index 151fd1795..000000000 --- a/docs/ru/guides/getting-started.md +++ /dev/null @@ -1,144 +0,0 @@ -# Введение - -## Настройка - -Для быстрого старта работы с `vue-test-utils`, клонируйте наш демонстрационный репозиторий с базовыми настройками и установите зависимости: - -``` bash -git clone https://github.com/vuejs/vue-test-utils-getting-started -cd vue-test-utils-getting-started -npm install -``` - -Вы увидите, что проект содержит простой компонент `counter.js`: - -```js -// counter.js - -export default { - template: ` -
- {{ count }} - -
- `, - - data () { - return { - count: 0 - } - }, - - methods: { - increment () { - this.count++ - } - } -} -``` - -### Монтирование компонентов - -`vue-test-utils` тестирует компоненты Vue монтируя их изолированно, создавая моки необходимых входных данных (входные параметры, инъекции и пользовательские события) и выполняя проверки над результатом (результат рендеринга, вызванные пользовательские события). - -Примонтированные компоненты возвращаются внутри [Wrapper](../api/wrapper/), который предоставляет множество удобных методов для манипулирования, перемещения и различных запросов для экземпляра компонента Vue. - -Вы можете создавать wrapper с помощью метода `mount`. Давайте создадим файл `test.js`: - -```js -// test.js - -// Импортируем метод `mount()` из `vue-test-utils` -// и компонент, который хотим протестировать -import { mount } from '@vue/test-utils' -import Counter from './counter' - -// Теперь монтируем компонент и у нас появляется wrapper -const wrapper = mount(Counter) - -// Вы можете получить доступ к экземпляру Vue через `wrapper.vm` -const vm = wrapper.vm - -// Чтобы изучить wrapper подробнее, просто выведите его в консоль -// и ваши приключения с `vue-test-utils` начнутся -console.log(wrapper) -``` - -### Тестирование отрендеренного HTML компонента - -Теперь, когда у нас есть wrapper, первой вещью, которую мы можем захотеть проверить что отрендеренный HTML компонента соответствует нашим ожиданиям. - -```js -import { mount } from '@vue/test-utils' -import Counter from './counter' - -describe('Компонент Counter', () => { - // Теперь монтируем компонент и получаем wrapper - const wrapper = mount(Counter) - - it('отображает корректную разметку', () => { - expect(wrapper.html()).toContain('0') - }) - - // также легко проверить наличие других элементов - it('имеет кнопку', () => { - expect(wrapper.contains('button')).toBe(true) - }) -}) -``` - -Теперь запустите тесты командой `npm test`. Вы должны увидеть, что все тесты проходят успешно. - -### Симуляция пользовательских действий - -Наш счётчик должен увеличивать значение, когда пользователь нажимает кнопку. Чтобы симулировать это поведение, нам необходимо сначала получить кнопку с помощью `wrapper.find()`, который возвращает **wrapper для элемента кнопки**. Мы можем симулировать клик с помощью вызова `.trigger()` на wrapper кнопки: - -```js -it('нажатие кнопки должно увеличивать счётчик', () => { - expect(wrapper.vm.count).toBe(0) - const button = wrapper.find('button') - button.trigger('click') - expect(wrapper.vm.count).toBe(1) -}) -``` - -### Что делать с `nextTick`? - -Vue собирает пачку предстоящих обновлений DOM и применяет их асинхронно для избежания ненужных повторных рендерингов, вызываемых множественными изменениями данных. Вот почему на практике на часто приходится использовать `Vue.nextTick` для ожидания, пока Vue не выполнит фактическое обновление DOM после того, как мы инициируем некоторое изменение состояния. - -Для упрощения работы, `vue-test-utils` применяет все обновления синхронно, поэтому вам не потребуется использовать `Vue.nextTick` для ожидания обновления DOM в ваших тестах. - -*Примечание: `nextTick` по-прежнему необходим, когда вам нужно явно форсировать цикл событий, для таких операций как асинхронные обратные вызовы или разрешение промисов.* - -Если вам всё ещё нужно использовать `nextTick` в ваших тестовых файлах, имейте ввиду, что любые ошибки, выброшенные внутри него, могут не быть отловлены вашей программой для запуска тестов, поскольку внутри он реализован на Promise. Существует два подхода исправления этого: либо вы можете установить коллбэк `done` как глобальный обработчик ошибок Vue в начале теста, либо вы можете вызывать `nextTick` без аргумента и вернуть его как Promise: - -```js -// эта ошибка не будет отловлена -it('ошибка не будет отслеживаться', (done) => { - Vue.nextTick(() => { - expect(true).toBe(false) - done() - }) -}) - -// два следующих теста будут работать как ожидается -it('должен отлавливать ошибку с использованием done', (done) => { - Vue.config.errorHandler = done - Vue.nextTick(() => { - expect(true).toBe(false) - done() - }) -}) - -it('должен отлавливать ошибку с использованием promise', () => { - return Vue.nextTick() - .then(function () { - expect(true).toBe(false) - }) -}) -``` - -## Что дальше - -- Интегрируйте `vue-test-utils` в ваш проект выбрав [программу для запуска тестов](./choosing-a-test-runner.md). -- Прочитайте больше об [общих техниках и советах при написании тестов](./common-tips.md). diff --git a/docs/ru/guides/testing-SFCs-with-jest.md b/docs/ru/guides/testing-SFCs-with-jest.md deleted file mode 100644 index b9458eea1..000000000 --- a/docs/ru/guides/testing-SFCs-with-jest.md +++ /dev/null @@ -1,212 +0,0 @@ -# Тестирование однофайловых компонентов с Jest - -> Пример проекта для этой конфигурации доступен на [GitHub](https://github.com/vuejs/vue-test-utils-jest-example). - -Jest — это программа для запуска тестов, разработанная Facebook, направленная на предоставление функционального решения для модульного тестирования. Вы можете узнать больше о Jest в [официальной документации](https://facebook.github.io/jest/). - -## Установка Jest - -Предположим, что вы начинаете с конфигурации, где правильно настроены webpack, vue-loader и Babel — например, развёрнутый шаблон `webpack-simple` с помощью `vue-cli`. - -Первым делом нам необходимо установить Jest и `vue-test-utils`: - -```bash -$ npm install --save-dev jest vue-test-utils -``` - -Затем, необходимо указать псевдоним для запуска тестов в нашем `package.json`. - -```json -// package.json -{ - "scripts": { - "test": "jest" - } -} -``` - -## Обработка однофайловых компонентов с Jest - -Чтобы научить Jest как обрабатывать `*.vue` файлы, нам необходимо установить и настроить пре-процессор `vue-jest`: - -``` bash -npm install --save-dev vue-jest -``` - -Теперь, создадим секцию `jest` в файле `package.json`: - -``` json -{ - // ... - "jest": { - "moduleFileExtensions": [ - "js", - "json", - // сообщаем Jest что необходимо обрабатывать `*.vue` файлы - "vue" - ], - "transform": { - // обрабатываем `*.vue` файлы с помощью `vue-jest` - ".*\\.(vue)$": "/node_modules/vue-jest" - }, - "mapCoverage": true - } -} -``` - -> **Примечание:** `vue-jest` в настоящее время не поддерживает все возможности `vue-loader`, например пользовательские блоки и загрузку стилей. Кроме того, некоторые функции, специфичные для webpack, такие как code-splitting, также не поддерживаются. Чтобы использовать их прочитайте руководство по [тестированию однофайловых компонентов с Mocha + webpack](./testing-SFCs-with-mocha-webpack.md). - -## Обработка псевдонимов webpack - -Если вы используете псевдонимы в конфигурации webpack, например когда `@` ссылается на путь `/src`, вам также нужно добавить соответствующую конфигурацию для Jest, используя опцию `moduleNameMapper`: - -``` json -{ - // ... - "jest": { - // ... - // добавление поддержки псевдонима @ -> src в исходном коде - "moduleNameMapper": { - "^@/(.*)$": "/src/$1" - } - } -} -``` - -## Конфигурация Babel для Jest - - -Хотя последние версии Node уже поддерживают большинство функций ES2015, вы всё равно можете использовать синтаксис ES-модулей и stage-x функции в ваших тестах. Для этого нужно установить `babel-jest`: - -``` bash -npm install --save-dev babel-jest -``` - -Затем мы должны сообщить Jest обрабатывать файлы тестов с JavaScript с помощью `babel-jest`, добавив запись `jest.transform` в `package.json`: - -``` json -{ - // ... - "jest": { - // ... - "transform": { - // ... - // обрабатывать js с помощью `babel-jest` - "^.+\\.js$": "/node_modules/babel-jest" - }, - // ... - } -} -``` - -> По умолчанию `babel-jest` автоматически настраивается по установке. Однако, поскольку мы явно добавили преобразование файлов `*.vue`, нам теперь нужно также настроить `babel-jest`. - -Предполагая использование `babel-preset-env` с webpack, конфигурация Babel по умолчанию отключает транспиляцию ES-модулей, потому что webpack уже знает как обрабатывать ES-модули. Однако нам нужно включить его для наших тестов, потому что тесты Jest запускаются непосредственно в Node. - -Кроме того, мы можем указать `babel-preset-env` в качестве цели используемую нами версию Node. Это пропустит транспиляцию ненужных функций и ускорит загрузку тестов. - -Чтобы применить эти параметры только для тестов, поместите их в отдельную конфигурацию в `env.test` (это будет автоматически обработано `babel-jest`). - -Пример `.babelrc`: - -``` json -{ - "presets": [ - ["env", { "modules": false }] - ], - "env": { - "test": { - "presets": [ - ["env", { "targets": { "node": "current" }}] - ] - } - } -} -``` - -## Тестирование моментальными снимками - -Вы можете использовать [`vue-server-renderer`](https://github.com/vuejs/vue/tree/dev/packages/vue-server-renderer) для рендеринга компонента в строку, чтобы его можно было сохранить в качестве снимка для [тестирования моментальными снимками в Jest](https://facebook.github.io/jest/docs/en/snapshot-testing.html). - -Результат рендеринга `vue-server-renderer` включает в себя несколько атрибутов, специфичных для SSR, и игнорирует пробелы, что затрудняет сравнивать diff. Мы можем улучшить сохранённый снимок с помощью специального сериализатора: - -``` bash -npm install --save-dev jest-serializer-vue -``` - -Затем добавьте конфигурацию в `package.json`: - -``` json -{ - // ... - "jest": { - // ... - // сериализатор для снимков - "snapshotSerializers": [ - "/node_modules/jest-serializer-vue" - ] - } -} -``` - -## Расположение файлов тестов - -По умолчанию Jest будет рекурсивно выбирать все файлы с расширением `.spec.js` или `.test.js` во всём проекте. Если это поведение не соответствует вашим потребностям, то возможно [изменить `testRegex`](https://facebook.github.io/jest/docs/en/configuration.html#testregex-string) в секции конфигурации в файле `package.json`. - -Jest рекомендует создать каталог `__tests__` рядом с тестируемым кодом, но не стесняйтесь структурировать ваши тесты по своему усмотрению. Просто остерегайтесь того, что Jest создаст каталог `__snapshots__` рядом с тестовыми файлами, который необходим для тестирования с помощью моментальных снимков. - -## Покрытие кода (Coverage) - -Jest может быть использован для генерации отчётов о покрытии кода в нескольких форматах. Ниже приведён простой пример для начала: - -Расширьте вашу конфигурацию `jest` (обычно расположенную в `package.json` или `jest.config.js`) с помощью опции [collectCoverage](https://facebook.github.io/jest/docs/en/configuration.html#collectcoverage-boolean), и затем добавьте массив [collectCoverageFrom](https://facebook.github.io/jest/docs/en/configuration.html#collectcoveragefrom-array) для определения файлов, для которых требуется собирать информацию о покрытии. Вы также можете установить [mapCoverage](https://facebook.github.io/jest/docs/en/configuration.html#mapcoverage-boolean) в значение `true`, для более аккуратного сбора информации о покрытии. - -```json -{ - "jest": { - // ... - "collectCoverage": true, - "collectCoverageFrom": [ - "**/*.{js,vue}", - "!**/node_modules/**" - ], - "mapCoverage": true - } -} -``` - -Это включит отчёты о покрытии с использованием [стандартных отчётов о покрытии](https://facebook.github.io/jest/docs/en/configuration.html#coveragereporters-array-string). Вы можете настроить их с помощью опции `coverageReporters`: - -```json -{ - "jest": { - // ... - "coverageReporters": ["html", "text-summary"] - } -} -``` - -Дополнительную информацию можно найти в [документации по конфигурации Jest](https://facebook.github.io/jest/docs/en/configuration.html#collectcoverage-boolean), где вы можете найти параметры для пороговых значений покрытия, каталоги вывода данных и т.д. - -## Пример спецификации - -Если вы знакомы с Jasmine, то вы должны чувствовать себя как дома с [проверочным API](https://facebook.github.io/jest/docs/en/expect.html#content) Jest: - -```js -import { mount } from '@vue/test-utils' -import Component from './component' - -describe('Component', () => { - test('является экземпляром Vue', () => { - const wrapper = mount(Component) - expect(wrapper.isVueInstance()).toBeTruthy() - }) -}) -``` - -## Ресурсы - -- [Пример проекта для этой конфигурации](https://github.com/vuejs/vue-test-utils-jest-example) -- [Примеры и слайды с Vue Conf 2017](https://github.com/codebryo/vue-testing-with-jest-conf17) -- [Jest](https://facebook.github.io/jest/) -- [Babel preset env](https://github.com/babel/babel-preset-env) diff --git a/docs/ru/guides/testing-SFCs-with-mocha-webpack.md b/docs/ru/guides/testing-SFCs-with-mocha-webpack.md deleted file mode 100644 index dc8a8b88c..000000000 --- a/docs/ru/guides/testing-SFCs-with-mocha-webpack.md +++ /dev/null @@ -1,184 +0,0 @@ -# Тестирование однофайловых компонентов с Mocha + webpack - -> Пример проекта для этой конфигурации доступен на [GitHub](https://github.com/vuejs/vue-test-utils-mocha-webpack-example). - -Другая стратегия тестирования однофайловых компонентов заключается в компиляции всех наших тестов с помощью webpack, а затем программой для запуска тестов. Преимущество такого подхода заключается в том, что он даёт нам полную поддержку всех функций webpack и `vue-loader`, поэтому нам не нужно идти на компромиссы в нашем исходном коде. - -Технически, вы можете использовать любую программу для запуска тестов, которая вам нравится, и вручную соединять вещи, но мы нашли [`mocha-webpack`](https://github.com/zinserjan/mocha-webpack) как очень удобный способ для реализации этой задачи. - -## Настройка `mocha-webpack` - -Мы предположим, что вы начинаете с настройки, когда уже есть правильно настроенные webpack, vue-loader и Babel — например используя шаблон `webpack-simple`, развёрнутый с помощью `vue-cli`. - -Первое, что нужно сделать, это установить тестовые зависимости: - -``` bash -npm install --save-dev @vue/test-utils mocha mocha-webpack -``` - -Затем мы должны указать скрипт test в нашем `package.json`. - -```json -// package.json -{ - "scripts": { - "test": "mocha-webpack --webpack-config webpack.config.js --require test/setup.js test/**/*.spec.js" - } -} -``` - -Несколько вещей, о том что мы сделали: - -- Флаг `--webpack-config` указывает конфигурационный файл webpack для использования в тестах. В большинстве случаев это будут идентичная конфигурация, используемой в проекте, с одной небольшой доработкой. Мы поговорим об этом позднее. - -- Флаг `--require` гарантирует, что файл `test/setup.js` будет запущен перед любыми тестами, в котором мы можем настроить для наших тестов глобальное окружение, в котором они будут запускаться. - -- Последний аргумент — это шаблон для тестовых файлов, которые будут включены в тестовую сборку. - -### Дополнительная конфигурация webpack - -#### Вынесение внешних NPM-зависимостей - -В наших тестах мы, скорее всего, импортируем ряд NPM-зависимостей — некоторые из этих модулей могут быть написаны не для использования в браузере и просто не смогут быть корректно добавлены в сборку webpack. Другой плюс в том, что извлечение внешних зависимостей значительно улучшит скорость загрузки тестов. Мы можем вынести все NPM-зависимости с помощью `webpack-node-externals`: - -```js -// webpack.config.js -const nodeExternals = require('webpack-node-externals') - -module.exports = { - // ... - externals: [nodeExternals()] -} -``` - -#### Source Maps - -Source maps должны быть встроены для использования в `mocha-webpack`. Рекомендуемая конфигурация: - -``` js -module.exports = { - // ... - devtool: 'inline-cheap-module-source-map' -} -``` - -При отладке через IDE рекомендуется также добавить следующее: - -``` js -module.exports = { - // ... - output: { - // ... - // использовать абсолютные пути в sourcemaps (важно для отладки через IDE) - devtoolModuleFilenameTemplate: '[absolute-resource-path]', - devtoolFallbackModuleFilenameTemplate: '[absolute-resource-path]?[hash]' - } -} -``` - -### Настройка браузерного окружения - -`vue-test-utils` требует браузерного окружения для запуска. Мы можем симулировать его в Node используя `jsdom-global`: - -```bash -npm install --save-dev jsdom jsdom-global -``` - -Затем в `test/setup.js`: - -``` js -require('jsdom-global')() -``` - -Это добавит браузерное окружение в Node, таким образом `vue-test-utils` сможет корректно запуститься. - -### Выбор библиотеки утверждений - -[Chai](http://chaijs.com/) — популярная библиотека утверждений, которая обычно используется вместе с Mocha. Вы также можете воспользоваться [Sinon](http://sinonjs.org/) для создания шпионов и заглушек. - -В качестве альтернативы вы можете использовать `expect`, который является частью Jest и реализует [точно такой же API](http://facebook.github.io/jest/docs/en/expect.html#content) в документации Jest. - -Мы будем использовать `expect` здесь и сделаем его глобально доступным, чтобы нам не приходилось импортировать его в каждом тесте: - -``` bash -npm install --save-dev expect -``` - -Затем в `test/setup.js`: - -``` js -require('jsdom-global')() - -global.expect = require('expect') -``` - -### Оптимизация Babel для тестов - -Обратите внимание, что мы используем `babel-loader` для обработки JavaScript. У вас уже должен быть настроен Babel, если вы используете его в своём приложении, через файл `.babelrc`. Здесь `babel-loader` будет автоматически использовать тот же файл конфигурации. - -Следует отметить, что если вы используете Node 6+, которая уже поддерживает большинство функций ES2015, вы можете настроить отдельную [опцию env](https://babeljs.io/docs/usage/babelrc/#env-option) Babel, которая будет транспилировать только те функции, которые ещё не поддерживаются в используемой версии Node (например, `stage-2` или поддержку синтаксиса flow, и т.п.). - -### Добавление теста - -Создайте файл в `src` названный `Counter.vue`: - -``` html - - - -``` - -И создайте файл теста, названный `test/Counter.spec.js` со следующим кодом: - -```js -import { shallow } from '@vue/test-utils' -import Counter from '../src/Counter.vue' - -describe('Counter.vue', () => { - it('увеличивает счётчик по нажатию кнопки', () => { - const wrapper = shallow(Counter) - wrapper.find('button').trigger('click') - expect(wrapper.find('div').text()).toMatch('1') - }) -}) -``` - -И теперь мы можем запустить тест: - -``` -npm run unit -``` - -Ура, мы запустили наши тесты! - -### Покрытие кода (Coverage) - -Для настройки покрытия кода в mocha-webpack, следуйте [инструкции по настройке покрытия кода mocha-webpack](https://github.com/zinserjan/mocha-webpack/blob/master/docs/guides/code-coverage.md). - -### Ресурсы - -- [Пример проекта для этой конфигурации](https://github.com/vuejs/vue-test-utils-mocha-webpack-example) -- [Mocha](https://mochajs.org/) -- [mocha-webpack](http://zinserjan.github.io/mocha-webpack/) -- [Chai](http://chaijs.com/) -- [Sinon](http://sinonjs.org/) -- [jest/expect](http://facebook.github.io/jest/docs/en/expect.html#content) diff --git a/docs/ru/guides/testing-async-components.md b/docs/ru/guides/testing-async-components.md deleted file mode 100644 index dc481fbc2..000000000 --- a/docs/ru/guides/testing-async-components.md +++ /dev/null @@ -1,97 +0,0 @@ -# Тестирование асинхронной логики - -Чтобы упростить тестирование, `vue-test-utils` применяет обновления DOM _синхронно_. Однако, есть некоторые тонкости, когда вам необходимо протестировать компонент с асинхронным поведением, таким как коллбэки или промисы. - -Одними из самых распространённых поведений являются запросы к API и действия Vuex. В примерах ниже будет показано как протестировать метод, который делает запрос к API. В этом примере используется Jest для запуска тестов и мок для HTTP-библиотеки `axios`. Подробнее о использовании моков в Jest можно прочитать [здесь](https://facebook.github.io/jest/docs/en/manual-mocks.html#content). - -Реализация мока для `axios` выглядит так: - -``` js -export default { - get: () => new Promise(resolve => { - resolve({ data: 'value' }) - }) -} -``` - -Компонент ниже делает вызов к API при нажатии кнопки и сохраняет полученный ответ в `value`. - -``` html - - - -``` - -Тест можно написать следующим образом: - -``` js -import { shallow } from '@vue/test-utils' -import Foo from './Foo' -jest.mock('axios') - -test('Foo', () => { - it('делает асинхронный запрос при нажатии кнопки', () => { - const wrapper = shallow(Foo) - wrapper.find('button').trigger('click') - expect(wrapper.vm.value).toBe('value') - }) -}) -``` - -В настоящее время этот тест не будет успешно проходить, потому что проверка значения вызывается до разрешения промиса `fetchResults`. Большинство библиотек для модульного тестирования предоставляют коллбэк, чтобы предоставить возможность определять когда тест должен будет завершаться. Jest и Mocha используют `done`. Мы можем использовать `done` в комбинации с `$nextTick` или `setTimeout`, чтобы гарантировать, что любые промисы будут разрешены перед проверками. - -``` js -test('Foo', () => { - it('делает асинхронный запрос при нажатии кнопки', (done) => { - const wrapper = shallow(Foo) - wrapper.find('button').trigger('click') - wrapper.vm.$nextTick(() => { - expect(wrapper.vm.value).toBe('value') - done() - }) - }) -}) -``` - -Необходимость `$nextTick` или `setTimeout` требуется для прохождения теста, потому что очередь микрозадач, в которой обрабатываются промисы, обрабатывается до очереди задач, где обрабатываются `$nextTick` и `setTimeout`. Это означает, что к моменту запуска `$nexTick` и `setTimeout`, будут выполнены любые коллбэки промисов. См. [здесь](https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/) для более подробного объяснения. - -Другое решение — использовать `async` функцию и npm-пакет `flush-promises`. `flush-promises` сбрасывает все ожидаемые промисы. Вы можете использовать `await` вызов для `flushPromises` чтобы очистить все ожидаемые промисы и улучшить читаемость вашего теста. - -Обновлённый тест будет выглядеть так: - -``` js -import { shallow } from '@vue/test-utils' -import flushPromises from 'flush-promises' -import Foo from './Foo' -jest.mock('axios') - -test('Foo', () => { - it('делает асинхронный запрос при нажатии кнопки', async () => { - const wrapper = shallow(Foo) - wrapper.find('button').trigger('click') - await flushPromises() - expect(wrapper.vm.value).toBe('value') - }) -}) -``` - -Подобная техника может применяться и для действий Vuex, которые возвращают promise по умолчанию. diff --git a/docs/ru/guides/using-with-vue-router.md b/docs/ru/guides/using-with-vue-router.md deleted file mode 100644 index 2e35c9ca0..000000000 --- a/docs/ru/guides/using-with-vue-router.md +++ /dev/null @@ -1,79 +0,0 @@ -# Использование с Vue Router - -## Установка Vue Router в тестах - -Вы никогда не должны устанавливать Vue Router в базовый конструктор Vue в тестах. Установка Vue Router добавляет `$route` и `$router` как свойства только для чтения на прототипе Vue. - -Чтобы этого избежать, мы можем создать localVue и установить Vue Router на него. - -```js -import { shallow, createLocalVue } from '@vue/test-utils' -import VueRouter from 'vue-router' - -const localVue = createLocalVue() -localVue.use(VueRouter) -const router = new VueRouter() - -shallow(Component, { - localVue, - router -}) -``` - -## Тестирование компонентов использующих `router-link` или `router-view` - -Когда вы устанавливаете Vue Router, регистрируются глобальные компоненты `router-link` и `router-view`. Это означает, что мы можем использовать их в любом месте нашего приложения без необходимости импортировать их. - -Когда мы запускаем тесты, нам нужно сделать эти компоненты vue-router доступными для компонента, который мы монтируем. Есть два способа сделать это. - -### Использование заглушек (stubs) - -```js -import { shallow } from '@vue/test-utils' - -shallow(Component, { - stubs: ['router-link', 'router-view'] -}) -``` - -### Установка Vue Router с помощью localVue - -```js -import { shallow, createLocalVue } from '@vue/test-utils' -import VueRouter from 'vue-router' - -const localVue = createLocalVue() -localVue.use(VueRouter) - -shallow(Component, { - localVue -}) -``` - -## Создание моков `$route` и `$router` - -Иногда вам может потребоваться протестировать, что компонент что-то делает с параметрами объектов `$route` и `$router`. Для этого вы можете передавать пользовательские моки в экземпляр Vue. - -```js -import { shallow } from '@vue/test-utils' - -const $route = { - path: '/some/path' -} - -const wrapper = shallow(Component, { - mocks: { - $route - } -}) - -wrapper.vm.$route.path // /some/path -``` - -## Общие ошибки - -Установка Vue Router добавляет `$route` и `$router` в качестве свойств только для чтения на прототипе Vue. - -Это означет, что любые будущие тесты, которые попытаются сделать мок `$route` или `$router` потерпят неудачу. - -Для избежания этого никогда не устанавливайте Vue Router глобально при запуске тестов; используйте localVue как было показано выше. diff --git a/docs/ru/guides/using-with-vuex.md b/docs/ru/guides/using-with-vuex.md deleted file mode 100644 index 198a4e28b..000000000 --- a/docs/ru/guides/using-with-vuex.md +++ /dev/null @@ -1,265 +0,0 @@ -# Использование с Vuex - -В этом руководстве мы рассмотрим как тестировать Vuex в компонентах с `vue-test-utils`. - -## Создание моков для действий - -Давайте посмотрим на часть кода. - -Это компонент который мы хотим протестировать. Он вызывает действие Vuex. - -``` html - - - -``` - -Для целей этого теста нам всё равно, что делает действие или как выглядит структура хранилища. Мы должны просто узнать, что это действие вызывается когда должно, и что оно вызывается с ожидаемым значением. - -Чтобы протестировать это, нам нужно передать мок хранилища в Vue, когда мы отделяем наш компонент. - -Вместо передачи хранилища в базовый конструктор Vue, мы можем передать его в [localVue](../api/options.md#localvue). localVue — это изолированный конструктор Vue, в который мы можем вносить изменения без влияния на глобальный конструктор Vue. - -Давайте посмотрим, как это выглядит: - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import Actions from '../../../src/components/Actions' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('Actions.vue', () => { - let actions - let store - - beforeEach(() => { - actions = { - actionClick: jest.fn(), - actionInput: jest.fn() - } - store = new Vuex.Store({ - state: {}, - actions - }) - }) - - it('вызывает действие хранилища "actionInput" когда значение поля "input" и было событие "input"', () => { - const wrapper = shallow(Actions, { store, localVue }) - const input = wrapper.find('input') - input.element.value = 'input' - input.trigger('input') - expect(actions.actionInput).toHaveBeenCalled() - }) - - it('не вызывает действие хранилища "actionInput" когда значение поля отлично от "input" и было событие "input"', () => { - const wrapper = shallow(Actions, { store, localVue }) - const input = wrapper.find('input') - input.element.value = 'not input' - input.trigger('input') - expect(actions.actionInput).not.toHaveBeenCalled() - }) - - it('вызывает действие хранилища "actionClick" по нажатию кнопки', () => { - const wrapper = shallow(Actions, { store, localVue }) - wrapper.find('button').trigger('click') - expect(actions.actionClick).toHaveBeenCalled() - }) -}) -``` - -Что тут происходит? Сначала мы говорим Vue использовать Vuex с помощью метода `localVue.use`. Это всего лишь обёртка вокруг `Vue.use`. - -Затем мы создаём мок хранилища вызовом `new Vuex.store` с нашими заготовленными значениями. Мы передаём ему только действия, так как это всё, что нам необходимо. - -Действия реализуются с помощью [mock-функций jest](https://facebook.github.io/jest/docs/en/mock-functions.html). Эти mock-функции предоставляют нам методы для проверки, вызывались ли действия или нет. - -Затем мы можем проверить в наших тестах, что заглушка действия была вызвана когда ожидалось. - -Теперь способ, которым мы определяем наше хранилище выглядит немного необычным для вас. - -Мы используем `beforeEach`, чтобы убедиться, что у нас есть чистое хранилище перед каждым тестом. `beforeEach` — это хук в mocha, который вызывается перед каждым тестом. В нашем тесте мы переназначаем значения переменных хранилища. Если бы мы этого не сделали, mock-функции нужно было бы автоматически сбрасывать. Это также позволяет нам изменять состояние в наших тестах, не влияя на последующие тесты. - -Самое важно, что следует отметить в этом тесте — то что **мы создаём мок хранилища Vuex и затем передаём его в `vue-test-utils`**. - -Отлично, теперь мы можем создавать моки действий, давайте посмотрим на создание моков для геттеров. - -## Создание моков для геттеров - -``` html - - - -``` - -Это довольно простой компонент. Он отображает результат геттеров `clicks` и `inputValue`. Опять же, нас не волнует что возвращают эти геттеры — только то, что их результат будет корректно отображён. - -Давайте посмотрим на тест: - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import Getters from '../../../src/components/Getters' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('Getters.vue', () => { - let getters - let store - - beforeEach(() => { - getters = { - clicks: () => 2, - inputValue: () => 'input' - } - - store = new Vuex.Store({ - getters - }) - }) - - it('Отображает "state.inputValue" в первом теге p', () => { - const wrapper = shallow(Getters, { store, localVue }) - const p = wrapper.find('p') - expect(p.text()).toBe(getters.inputValue()) - }) - - it('Отображает "state.clicks" во втором теге p', () => { - const wrapper = shallow(Getters, { store, localVue }) - const p = wrapper.findAll('p').at(1) - expect(p.text()).toBe(getters.clicks().toString()) - }) -}) -``` - -Этот тест очень похож на тест действий. Мы создаём мок хранилища перед каждым тестом, передаём его в качестве опции когда вызываем `shallow`, и проверяем что значение вернувшееся из мока-геттера отображается. - -Это здорово, но что, если мы хотим проверить, что наши геттеры возвращают правильную часть нашего состояния? - -## Создание моков с модулями - -[Модули](https://vuex.vuejs.org/ru/modules.html) полезны для разделения нашего хранилища на управляемые части. Они также экспортируют геттеры. Мы можем использовать их в наших тестах. - -Давайте взглянем на наш компонент: - -``` html - - - -``` - -Простой компонент, который содержит одно действие и один геттер. - -И тест: - -``` js -import { shallow, createLocalVue } from '@vue/test-utils' -import Vuex from 'vuex' -import Modules from '../../../src/components/Modules' -import module from '../../../src/store/module' - -const localVue = createLocalVue() - -localVue.use(Vuex) - -describe('Modules.vue', () => { - let actions - let state - let store - - beforeEach(() => { - state = { - module: { - clicks: 2 - } - } - - actions = { - moduleActionClick: jest.fn() - } - - store = new Vuex.Store({ - state, - actions, - getters: module.getters - }) - }) - - it('вызывает действие "moduleActionClick" при нажатии кнопки', () => { - const wrapper = shallow(Modules, { store, localVue }) - const button = wrapper.find('button') - button.trigger('click') - expect(actions.moduleActionClick).toHaveBeenCalled() - }) - - it('отображает "state.inputValue" в первом теге p', () => { - const wrapper = shallow(Modules, { store, localVue }) - const p = wrapper.find('p') - expect(p.text()).toBe(state.module.clicks.toString()) - }) -}) -``` - -### Ресурсы - -- [Пример проекта для этого руководства](https://github.com/eddyerburgh/vue-test-utils-vuex-example) -- [`localVue`](../api/options.md#localvue) -- [`createLocalVue`](../api/createLocalVue.md) diff --git a/package.json b/package.json index 5f5a71907..bc43d6605 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,9 @@ "build": "lerna run build", "build:test": "lerna run build:test", "clean": "lerna clean --yes", - "docs": "cd docs && gitbook install && gitbook serve", + "docs": "vuepress dev docs", "docs:deploy": "scripts/update-docs.sh", - "docs:serve": "cd docs && gitbook serve", + "docs:build": "vuepress build docs", "flow": "flow check", "lint": "eslint --ext js,vue . --ignore-path .gitignore", "lint:docs": "eslint --ext js,vue,md docs --ignore-path .gitignore", @@ -47,10 +47,6 @@ "eslint-plugin-markdown": "^1.0.0-beta.6", "eslint-plugin-vue-libs": "^2.1.0", "flow-bin": "^0.66.0", - "gitbook-cli": "^2.3.0", - "gitbook-plugin-edit-link": "^2.0.2", - "gitbook-plugin-github": "^3.0.0", - "gitbook-plugin-theme-vuejs": "^1.1.0", "jsdom": "^11.5.1", "jsdom-global": "^3.0.2", "karma": "^1.7.0", @@ -61,6 +57,7 @@ "karma-spec-reporter": "^0.0.31", "karma-webpack": "^2.0.3", "lerna": "2", + "markdown-it-include": "^1.0.0", "mocha": "^3.5.0", "mocha-webpack": "^1.0.1", "rollup": "^0.58.2", @@ -72,6 +69,8 @@ "vue-router": "^3.0.1", "vue-server-renderer": "2.5.13", "vue-template-compiler": "2.5.13", + "vuepress": "^0.8.4", + "vuepress-theme-vue": "^1.0.2", "vuetify": "^0.16.9", "vuex": "^3.0.1", "webpack": "^3.0.1", diff --git a/yarn.lock b/yarn.lock index ba62a4a3c..455b93d26 100644 --- a/yarn.lock +++ b/yarn.lock @@ -71,6 +71,33 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.0.2.tgz#d056b68999769728a1cff8d643bc59eb6f0be436" + +"@shellscape/koa-send@^4.1.0": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@shellscape/koa-send/-/koa-send-4.1.3.tgz#1a7c8df21f63487e060b7bfd8ed82e1d3c4ae0b0" + dependencies: + debug "^2.6.3" + http-errors "^1.6.1" + mz "^2.6.0" + resolve-path "^1.3.3" + +"@shellscape/koa-static@^4.0.4": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@shellscape/koa-static/-/koa-static-4.0.5.tgz#b329b55bfd41056a6981c584ae6bace30b5b6b3b" + dependencies: + "@shellscape/koa-send" "^4.1.0" + debug "^2.6.8" + "@types/acorn@^4.0.3": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.3.tgz#d1f3e738dde52536f9aad3d3380d14e448820afd" @@ -85,7 +112,137 @@ version "9.6.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.6.tgz#439b91f9caf3983cad2eef1e11f6bedcbf9431d2" -JSONStream@^1.0.4, JSONStream@~1.3.1: +"@vue/component-compiler-utils@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-1.2.1.tgz#3d543baa75cfe5dab96e29415b78366450156ef6" + dependencies: + consolidate "^0.15.1" + hash-sum "^1.0.2" + lru-cache "^4.1.2" + merge-source-map "^1.1.0" + postcss "^6.0.20" + postcss-selector-parser "^3.1.1" + prettier "^1.11.1" + source-map "^0.5.6" + vue-template-es2015-compiler "^1.6.0" + +"@webassemblyjs/ast@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.4.3.tgz#3b3f6fced944d8660273347533e6d4d315b5934a" + dependencies: + "@webassemblyjs/helper-wasm-bytecode" "1.4.3" + "@webassemblyjs/wast-parser" "1.4.3" + debug "^3.1.0" + webassemblyjs "1.4.3" + +"@webassemblyjs/floating-point-hex-parser@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.4.3.tgz#f5aee4c376a717c74264d7bacada981e7e44faad" + +"@webassemblyjs/helper-buffer@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.4.3.tgz#0434b55958519bf503697d3824857b1dea80b729" + dependencies: + debug "^3.1.0" + +"@webassemblyjs/helper-code-frame@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.4.3.tgz#f1349ca3e01a8e29ee2098c770773ef97af43641" + dependencies: + "@webassemblyjs/wast-printer" "1.4.3" + +"@webassemblyjs/helper-fsm@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.4.3.tgz#65a921db48fb43e868f17b27497870bdcae22b79" + +"@webassemblyjs/helper-wasm-bytecode@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.4.3.tgz#0e5b4b5418e33f8a26e940b7809862828c3721a5" + +"@webassemblyjs/helper-wasm-section@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.4.3.tgz#9ceedd53a3f152c3412e072887ade668d0b1acbf" + dependencies: + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/helper-buffer" "1.4.3" + "@webassemblyjs/helper-wasm-bytecode" "1.4.3" + "@webassemblyjs/wasm-gen" "1.4.3" + debug "^3.1.0" + +"@webassemblyjs/leb128@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.4.3.tgz#5a5e5949dbb5adfe3ae95664d0439927ac557fb8" + dependencies: + leb "^0.3.0" + +"@webassemblyjs/validation@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/validation/-/validation-1.4.3.tgz#9e66c9b3079d7bbcf2070c1bf52a54af2a09aac9" + dependencies: + "@webassemblyjs/ast" "1.4.3" + +"@webassemblyjs/wasm-edit@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.4.3.tgz#87febd565e0ffb5ae25f6495bb3958d17aa0a779" + dependencies: + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/helper-buffer" "1.4.3" + "@webassemblyjs/helper-wasm-bytecode" "1.4.3" + "@webassemblyjs/helper-wasm-section" "1.4.3" + "@webassemblyjs/wasm-gen" "1.4.3" + "@webassemblyjs/wasm-opt" "1.4.3" + "@webassemblyjs/wasm-parser" "1.4.3" + "@webassemblyjs/wast-printer" "1.4.3" + debug "^3.1.0" + +"@webassemblyjs/wasm-gen@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.4.3.tgz#8553164d0154a6be8f74d653d7ab355f73240aa4" + dependencies: + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/helper-wasm-bytecode" "1.4.3" + "@webassemblyjs/leb128" "1.4.3" + +"@webassemblyjs/wasm-opt@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.4.3.tgz#26c7a23bfb136aa405b1d3410e63408ec60894b8" + dependencies: + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/helper-buffer" "1.4.3" + "@webassemblyjs/wasm-gen" "1.4.3" + "@webassemblyjs/wasm-parser" "1.4.3" + debug "^3.1.0" + +"@webassemblyjs/wasm-parser@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.4.3.tgz#7ddd3e408f8542647ed612019cfb780830993698" + dependencies: + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/helper-wasm-bytecode" "1.4.3" + "@webassemblyjs/leb128" "1.4.3" + "@webassemblyjs/wasm-parser" "1.4.3" + webassemblyjs "1.4.3" + +"@webassemblyjs/wast-parser@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.4.3.tgz#3250402e2c5ed53dbe2233c9de1fe1f9f0d51745" + dependencies: + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/floating-point-hex-parser" "1.4.3" + "@webassemblyjs/helper-code-frame" "1.4.3" + "@webassemblyjs/helper-fsm" "1.4.3" + long "^3.2.0" + webassemblyjs "1.4.3" + +"@webassemblyjs/wast-printer@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.4.3.tgz#3d59aa8d0252d6814a3ef4e6d2a34c9ded3904e0" + dependencies: + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/wast-parser" "1.4.3" + long "^3.2.0" + +JSONStream@^1.0.4: version "1.3.2" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" dependencies: @@ -96,14 +253,10 @@ abab@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" -abbrev@1, abbrev@~1.1.0: +abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" -abbrev@~1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - accepts@1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" @@ -111,6 +264,13 @@ accepts@1.3.3: mime-types "~2.1.11" negotiator "0.6.1" +accepts@^1.2.2: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + acorn-dynamic-import@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" @@ -165,17 +325,9 @@ after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" -agent-base@4, agent-base@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.0.tgz#9838b5c3392b962bad031e6a4c5e1024abec45ce" - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.3.0.tgz#6d5de5829afd3be2712201a39275fd11c651857c" - dependencies: - humanize-ms "^1.2.1" +agentkeepalive@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: version "3.1.0" @@ -213,6 +365,26 @@ ajv@^6.1.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" +algoliasearch@^3.24.5: + version "3.27.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.27.1.tgz#e1af42b97dbf44a2dd3a8c907be99c0c34e48414" + dependencies: + agentkeepalive "^2.2.0" + debug "^2.6.8" + envify "^4.0.0" + es6-promise "^4.1.0" + events "^1.1.0" + foreach "^2.0.5" + global "^4.3.2" + inherits "^2.0.1" + isarray "^2.0.1" + load-script "^1.0.0" + object-keys "^1.0.11" + querystring-es3 "^0.2.1" + reduce "^1.0.1" + semver "^5.1.0" + tunnel-agent "^0.6.0" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -243,7 +415,7 @@ ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" -ansi-regex@^3.0.0, ansi-regex@~3.0.0: +ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" @@ -257,17 +429,15 @@ ansi-styles@^3.1.0, ansi-styles@^3.2.0: dependencies: color-convert "^1.9.0" -ansi@^0.3.0, ansi@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" - -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" -ansistyles@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" +any-promise@^1.0.0, any-promise@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" anymatch@^1.3.0: version "1.3.2" @@ -276,17 +446,24 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +app-root-path@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" -aproba@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" - -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" +arch@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.0.tgz#3613aa46149064b3c1f0607919bf1d4786e82889" are-we-there-yet@~1.1.2: version "1.1.4" @@ -307,10 +484,18 @@ arr-diff@^2.0.0: dependencies: arr-flatten "^1.0.1" -arr-flatten@^1.0.1: +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -341,6 +526,10 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + arraybuffer.slice@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" @@ -349,10 +538,6 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -383,6 +568,10 @@ assertion-error@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" @@ -391,17 +580,11 @@ async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" -async-some@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/async-some/-/async-some-1.0.2.tgz#4d8a81620d5958791b5b98f802d3207776e95509" - dependencies: - dezalgo "^1.0.2" - -async@^1.4.0, async@^1.5.0: +async@^1.4.0, async@^1.5.0, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.0.1, async@^2.1.2: +async@^2.1.2: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: @@ -415,6 +598,16 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +atob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" + +autocomplete.js@^0.29.0: + version "0.29.0" + resolved "https://registry.yarnpkg.com/autocomplete.js/-/autocomplete.js-0.29.0.tgz#0185f7375ee9daf068f7d52d794bc90dcd739fd7" + dependencies: + immediate "^3.2.3" + autoprefixer@^6.3.1: version "6.7.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" @@ -426,6 +619,17 @@ autoprefixer@^6.3.1: postcss "^5.2.16" postcss-value-parser "^3.2.3" +autoprefixer@^8.2.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.5.0.tgz#89a39b1316fbe7bc2b4997a0c7dad0149d99511c" + dependencies: + browserslist "^3.2.7" + caniuse-lite "^1.0.30000839" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.22" + postcss-value-parser "^3.2.3" + aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" @@ -1072,9 +1276,17 @@ base64id@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" -bash-color@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/bash-color/-/bash-color-0.0.4.tgz#e9be8ce33540cada4881768c59bd63865736e913" +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" bcrypt-pbkdf@^1.0.0: version "1.0.1" @@ -1096,29 +1308,17 @@ binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" -bl@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e" - dependencies: - readable-stream "^2.0.5" - -bl@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" - dependencies: - readable-stream "~2.0.5" - blob@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" -block-stream@*, block-stream@0.0.9: +block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" dependencies: inherits "~2.0.0" -bluebird@^3.1.1, bluebird@^3.3.0, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@~3.5.0: +bluebird@^3.1.1, bluebird@^3.3.0, bluebird@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -1163,7 +1363,7 @@ boom@5.x.x: dependencies: hoek "4.x.x" -boxen@^1.0.0: +boxen@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" dependencies: @@ -1196,6 +1396,21 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +braces@^2.3.0, braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1274,7 +1489,20 @@ browserslist@^2.1.2: caniuse-lite "^1.0.30000792" electron-to-chromium "^1.3.30" -buble@^0.19.2: +browserslist@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.7.tgz#aa488634d320b55e88bab0256184dbbcca1e6de9" + dependencies: + caniuse-lite "^1.0.30000835" + electron-to-chromium "^1.3.45" + +buble-loader@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/buble-loader/-/buble-loader-0.5.0.tgz#bde97505c2b9310965579c2e4eebfb8d34819968" + dependencies: + loader-utils "^1.1.0" + +buble@^0.19.2, buble@^0.19.3: version "0.19.3" resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.3.tgz#01e9412062cff1da6f20342b6ecd72e7bf699d02" dependencies: @@ -1287,10 +1515,6 @@ buble@^0.19.2: os-homedir "^1.0.1" vlq "^1.0.0" -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1311,14 +1535,6 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" -builtins@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-0.0.7.tgz#355219cd6cf18dbe7c01cc7fd2dce765cfdc549a" - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - byline@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" @@ -1327,7 +1543,7 @@ bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" -cacache@^10.0.0: +cacache@^10.0.4: version "10.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" dependencies: @@ -1345,45 +1561,23 @@ cacache@^10.0.0: unique-filename "^1.1.0" y18n "^4.0.0" -cacache@^9.2.9: - version "9.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-9.3.0.tgz#9cd58f2dd0b8c8cacf685b7067b416d6d3cf9db1" - dependencies: - bluebird "^3.5.0" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^1.3.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.1" - ssri "^4.1.6" - unique-filename "^1.1.0" - y18n "^3.2.1" - -cacache@~9.2.9: - version "9.2.9" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-9.2.9.tgz#f9d7ffe039851ec94c28290662afa4dd4bb9e8dd" - dependencies: - bluebird "^3.5.0" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^1.3.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.1" - ssri "^4.1.6" - unique-filename "^1.1.0" - y18n "^3.2.1" - -call-limit@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.0.tgz#6fd61b03f3da42a2cd0ec2b60f02bd0e71991fea" +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" caller-path@^0.1.0: version "0.1.0" @@ -1399,6 +1593,13 @@ callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -1447,14 +1648,14 @@ caniuse-lite@^1.0.30000792: version "1.0.30000810" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000810.tgz#47585fffce0e9f3593a6feea4673b945424351d9" +caniuse-lite@^1.0.30000835, caniuse-lite@^1.0.30000839: + version "1.0.30000843" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000843.tgz#4fdec258dc641c385744cdd49d23c5459c3d4411" + capture-stack-trace@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1477,7 +1678,7 @@ chai@^4.0.0: pathval "^1.0.0" type-detect "^4.0.0" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -1503,9 +1704,13 @@ chalk@^2.1.0: escape-string-regexp "^1.0.5" supports-color "^4.0.0" -char-spinner@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" +chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" character-entities-legacy@^1.0.0: version "1.1.1" @@ -1538,10 +1743,6 @@ cheerio@^1.0.0-rc.2: lodash "^4.15.0" parse5 "^3.0.1" -chmodr@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-1.0.2.tgz#04662b932d0f02ec66deaa2b0ea42811968e3eb9" - chokidar@^1.4.1, chokidar@^1.6.1, chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" @@ -1557,10 +1758,32 @@ chokidar@^1.4.1, chokidar@^1.6.1, chokidar@^1.7.0: optionalDependencies: fsevents "^1.0.0" -chownr@^1.0.1, chownr@~1.0.1: +chokidar@^2.0.2, chokidar@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^2.1.1" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + upath "^1.0.0" + optionalDependencies: + fsevents "^1.1.2" + +chownr@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" +chrome-trace-event@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-0.1.3.tgz#d395af2d31c87b90a716c831fe326f69768ec084" + ci-info@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" @@ -1582,11 +1805,26 @@ clap@^1.0.9: dependencies: chalk "^1.1.3" +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@4.1.x: + version "4.1.11" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" + dependencies: + source-map "0.5.x" + cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" -cli-cursor@^2.1.0: +cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: @@ -1596,6 +1834,21 @@ cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" +clipboard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.1.tgz#a12481e1c13d8a50f5f036b0560fe5d16d74e46a" + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + +clipboardy@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" + dependencies: + arch "^2.1.0" + execa "^0.8.0" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -1616,7 +1869,7 @@ clone@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" -cmd-shim@^2.0.2, cmd-shim@~2.0.2: +cmd-shim@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" dependencies: @@ -1641,6 +1894,13 @@ collapse-white-space@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c" +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + color-convert@^1.3.0, color-convert@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" @@ -1677,7 +1937,7 @@ colors@^1.1.0, colors@^1.1.2, colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -columnify@^1.5.4, columnify@~1.5.4: +columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" dependencies: @@ -1700,9 +1960,9 @@ command-join@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/command-join/-/command-join-2.0.0.tgz#52e8b984f4872d952ff1bdc8b98397d27c7144cf" -commander@2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" +commander@2.15.x, commander@^2.15.1, commander@~2.15.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" commander@2.9.0: version "2.9.0" @@ -1710,9 +1970,15 @@ commander@2.9.0: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.9.0: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + +common-tags@^1.4.0: + version "1.7.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.7.2.tgz#24d9768c63d253a56ecff93845b44b4df1d52771" + dependencies: + babel-runtime "^6.26.0" commondir@^1.0.1: version "1.0.1" @@ -1733,7 +1999,7 @@ component-emitter@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" -component-emitter@1.2.1: +component-emitter@1.2.1, component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" @@ -1745,7 +2011,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.6.0, concat-stream@^1.4.10, concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^1.6.0: +concat-stream@1.6.0, concat-stream@^1.4.10, concat-stream@^1.5.0, concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -1757,13 +2023,6 @@ conditional-specs@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/conditional-specs/-/conditional-specs-1.0.1.tgz#1137ca6f83e5de848853cf0cfac78fe858b40a9a" -config-chain@~1.1.10, config-chain@~1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - configstore@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" @@ -1775,6 +2034,10 @@ configstore@^3.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" +connect-history-api-fallback@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + connect@^3.6.0: version "3.6.6" resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" @@ -1784,6 +2047,15 @@ connect@^3.6.0: parseurl "~1.3.2" utils-merge "1.0.1" +consola@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/consola/-/consola-1.3.0.tgz#b5effe41c4ecdce971d79268d72b8f9bde0a8c7a" + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + lodash "^4.17.5" + std-env "^1.1.0" + console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -1800,15 +2072,25 @@ consolidate@^0.14.0: dependencies: bluebird "^3.1.1" +consolidate@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" + dependencies: + bluebird "^3.1.1" + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" +content-disposition@~0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + content-type-parser@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" -content-type@~1.0.4: +content-type@^1.0.0, content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" @@ -2086,6 +2368,13 @@ cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" +cookies@~0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.7.1.tgz#7c8a615f5481c61ab9f16c833731bcb8f663b99b" + dependencies: + depd "~1.1.1" + keygrip "~1.0.2" + copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -2097,6 +2386,23 @@ copy-concurrently@^1.0.0: rimraf "^2.5.4" run-queue "^1.0.0" +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +copy-webpack-plugin@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.5.1.tgz#fc4f68f4add837cc5e13d111b20715793225d29c" + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + globby "^7.1.1" + is-glob "^4.0.0" + loader-utils "^1.1.0" + minimatch "^3.0.4" + p-limit "^1.0.0" + serialize-javascript "^1.4.0" + core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0: version "2.5.3" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" @@ -2117,6 +2423,15 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: parse-json "^2.2.0" require-from-string "^1.1.0" +cosmiconfig@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + require-from-string "^2.0.1" + create-ecdh@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" @@ -2201,9 +2516,9 @@ css-color-names@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" -css-loader@^0.28.4: - version "0.28.10" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.10.tgz#40282e79230f7bcb4e483efa631d670b735ebf42" +css-loader@^0.28.11: + version "0.28.11" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" dependencies: babel-code-frame "^6.26.0" css-selector-tokenizer "^0.7.0" @@ -2220,13 +2535,36 @@ css-loader@^0.28.4: postcss-value-parser "^3.3.0" source-list-map "^2.0.0" -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" +css-loader@^0.28.4: + version "0.28.10" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.10.tgz#40282e79230f7bcb4e483efa631d670b735ebf42" dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + cssnano "^3.10.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.1.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-parse@1.7.x: + version "1.7.0" + resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" + +css-select@^1.1.0, css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" nth-check "~1.0.1" css-selector-tokenizer@^0.7.0: @@ -2245,7 +2583,7 @@ cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" -cssnano@^3.10.0: +cssnano@^3.10.0, cssnano@^3.4.0: version "3.10.0" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" dependencies: @@ -2356,9 +2694,9 @@ de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" -debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.6.8: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" +debug@*, debug@^3.0.1, debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" @@ -2380,16 +2718,12 @@ debug@2.6.8: dependencies: ms "2.0.0" -debug@^3.0.1, debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -2401,6 +2735,10 @@ decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -2411,6 +2749,10 @@ deep-eql@^3.0.0: dependencies: type-detect "^4.0.0" +deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + deep-extend@~0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" @@ -2419,12 +2761,42 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +deepmerge@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" dependencies: clone "^1.0.2" +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" @@ -2445,6 +2817,10 @@ delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -2453,7 +2829,7 @@ depd@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" -depd@~1.1.1: +depd@^1.1.0, depd@~1.1.1, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -2464,13 +2840,17 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destroy@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" dependencies: repeating "^2.0.0" -detect-indent@^5.0.0, detect-indent@~5.0.0: +detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" @@ -2478,17 +2858,14 @@ detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" -dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@^1.0.2, dezalgo@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - dependencies: - asap "^2.0.0" - wrappy "1" - di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" +diacritics@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/diacritics/-/diacritics-1.3.0.tgz#3efa87323ebb863e6696cebb0082d48ff3d6f7a1" + diff@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" @@ -2505,12 +2882,34 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dir-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +docsearch.js@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/docsearch.js/-/docsearch.js-2.5.2.tgz#1a3521c92e5f252cc522c57357ef1c47b945b381" + dependencies: + algoliasearch "^3.24.5" + autocomplete.js "^0.29.0" + hogan.js "^3.0.2" + to-factory "^1.0.0" + doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" dependencies: esutils "^2.0.2" +dom-converter@~0.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" + dependencies: + utila "~0.3" + dom-serialize@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" @@ -2527,6 +2926,10 @@ dom-serializer@0, dom-serializer@~0.1.0: domelementtype "~1.1.1" entities "~1.1.1" +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -2545,12 +2948,24 @@ domexception@^1.0.0: dependencies: webidl-conversions "^4.0.2" +domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + dependencies: + domelementtype "1" + domhandler@^2.3.0: version "2.4.1" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" dependencies: domelementtype "1" +domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + dependencies: + domelementtype "1" + domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -2571,7 +2986,7 @@ dot-prop@^3.0.0: dependencies: is-obj "^1.0.0" -dot-prop@^4.1.0: +dot-prop@^4.1.0, dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" dependencies: @@ -2600,10 +3015,6 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" -editor@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -2612,6 +3023,10 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: version "1.3.34" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz#d93498f40391bb0c16a603d8241b9951404157ed" +electron-to-chromium@^1.3.45: + version "1.3.47" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.47.tgz#764e887ca9104d01a0ac8eabee7dfc0e2ce14104" + elliptic@^6.0.0: version "6.4.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" @@ -2632,12 +3047,6 @@ encodeurl@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - dependencies: - iconv-lite "~0.4.13" - end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -2692,6 +3101,14 @@ enhanced-resolve@^3.4.0: object-assign "^4.0.1" tapable "^0.2.7" +enhanced-resolve@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz#e34a6eaa790f62fccd71d93959f56b2b432db10a" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + ent@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" @@ -2700,11 +3117,14 @@ entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" +envify@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" + dependencies: + esprima "^4.0.0" + through "~2.3.4" -"errno@>=0.1.1 <0.2.0-0", errno@^0.1.3: +errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" dependencies: @@ -2716,6 +3136,28 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +error-inject@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" + +es-abstract@^1.5.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: version "0.10.39" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.39.tgz#fca21b67559277ca4ac1a1ed7048b107b6f76d87" @@ -2742,16 +3184,10 @@ es6-map@^0.1.3: es6-symbol "~3.1.1" event-emitter "~0.3.5" -es6-promise@^4.0.3: +es6-promise@^4.0.3, es6-promise@^4.1.0, es6-promise@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - dependencies: - es6-promise "^4.0.3" - es6-set@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" @@ -2778,7 +3214,7 @@ es6-weak-map@^2.0.1: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -escape-html@~1.0.3: +escape-html@^1.0.3, escape-html@~1.0.1, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2948,7 +3384,7 @@ eventemitter3@1.x.x: version "1.2.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" -events@^1.0.0: +events@^1.0.0, events@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -2997,6 +3433,18 @@ expand-brackets@^0.1.4: dependencies: is-posix-bracket "^0.1.0" +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + expand-range@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" @@ -3010,6 +3458,19 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -3028,6 +3489,19 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + extract-zip@^1.6.5: version "1.6.6" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c" @@ -3049,6 +3523,17 @@ fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" +fast-glob@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.2.tgz#71723338ac9b4e0e2fff1d6748a2a13d5ed352bf" + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.0.1" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.1" + micromatch "^3.1.10" + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -3080,6 +3565,13 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" +file-loader@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.4.5" + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -3094,6 +3586,15 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + finalhandler@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" @@ -3158,7 +3659,7 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" -for-in@^1.0.1: +for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -3168,18 +3669,14 @@ for-own@^0.1.4: dependencies: for-in "^1.0.1" +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@~1.0.0-rc4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" - dependencies: - async "^2.0.1" - combined-stream "^1.0.5" - mime-types "^2.1.11" - form-data@~2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" @@ -3202,12 +3699,15 @@ formatio@1.2.0: dependencies: samsam "1.x" -from2@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" dependencies: - inherits "~2.0.1" - readable-stream "~1.1.10" + map-cache "^0.2.2" + +fresh@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" from2@^2.1.0: version "2.3.0" @@ -3216,14 +3716,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - fs-extra@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" @@ -3232,7 +3724,7 @@ fs-extra@^1.0.0: jsonfile "^2.1.0" klaw "^1.0.0" -fs-extra@^4.0.1: +fs-extra@^4.0.1, fs-extra@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" dependencies: @@ -3240,15 +3732,21 @@ fs-extra@^4.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-vacuum@~1.2.10, fs-vacuum@~1.2.9: - version "1.2.10" - resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" +fs-extra@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" dependencies: graceful-fs "^4.1.2" - path-is-inside "^1.0.1" - rimraf "^2.5.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + dependencies: + minipass "^2.2.1" -fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10, fs-write-stream-atomic@~1.0.8: +fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" dependencies: @@ -3268,7 +3766,14 @@ fsevents@^1.0.0: nan "^2.3.0" node-pre-gyp "^0.6.39" -fstream-ignore@^1.0.0, fstream-ignore@^1.0.5: +fsevents@^1.1.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +fstream-ignore@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" dependencies: @@ -3276,21 +3781,7 @@ fstream-ignore@^1.0.0, fstream-ignore@^1.0.5: inherits "2" minimatch "^3.0.0" -fstream-npm@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fstream-npm/-/fstream-npm-1.1.1.tgz#6b9175db6239a83d8209e232426c494dbb29690c" - dependencies: - fstream-ignore "^1.0.0" - inherits "2" - -fstream-npm@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/fstream-npm/-/fstream-npm-1.2.1.tgz#08c4a452f789dcbac4c89a4563c902b2c862fd5b" - dependencies: - fstream-ignore "^1.0.0" - inherits "2" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10, fstream@~1.0.11: +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" dependencies: @@ -3299,7 +3790,7 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10, fstream@~1.0.1 mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2: +function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -3307,30 +3798,6 @@ functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" -gauge@~1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" - dependencies: - ansi "^0.3.0" - has-unicode "^2.0.0" - lodash.pad "^4.1.0" - lodash.padend "^4.1.0" - lodash.padstart "^4.1.0" - -gauge@~2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-color "^0.1.7" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -3344,20 +3811,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -genfun@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-4.0.1.tgz#ed10041f2e4a7f1b0a38466d17a5c3e27df1dfc1" - get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" @@ -3388,6 +3841,10 @@ get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -3435,48 +3892,12 @@ git-semver-tags@^1.3.3: meow "^3.3.0" semver "^5.0.1" -gitbook-cli@^2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/gitbook-cli/-/gitbook-cli-2.3.2.tgz#5e893582e1f743f6fa920c3c3eb36b62ea4a31a0" - dependencies: - bash-color "0.0.4" - commander "2.11.0" - fs-extra "3.0.1" - lodash "4.17.4" - npm "5.1.0" - npmi "1.0.1" - optimist "0.6.1" - q "1.5.0" - semver "5.3.0" - tmp "0.0.31" - user-home "2.0.0" - -gitbook-plugin-edit-link@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/gitbook-plugin-edit-link/-/gitbook-plugin-edit-link-2.0.2.tgz#d8fcd927eced81e7a662a72d59db609eafd7e72f" - -gitbook-plugin-github@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/gitbook-plugin-github/-/gitbook-plugin-github-3.0.0.tgz#67457df98a57ea8ef9b2518b88340db370a5317b" - -gitbook-plugin-theme-vuejs@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/gitbook-plugin-theme-vuejs/-/gitbook-plugin-theme-vuejs-1.1.0.tgz#dc779c8e58113440a55755c2470fc3912948a9cc" - gitconfiglocal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" dependencies: ini "^1.3.2" -github-url-from-git@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/github-url-from-git/-/github-url-from-git-1.4.0.tgz#285e6b520819001bde128674704379e4ff03e0de" - -github-url-from-username-repo@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/github-url-from-username-repo/-/github-url-from-username-repo-1.0.2.tgz#7dd79330d2abe69c10c2cef79714c97215791dfa" - glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -3497,6 +3918,21 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + +glob@7.0.x: + version "7.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" @@ -3508,7 +3944,7 @@ glob@7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.2: +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -3519,16 +3955,18 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@~7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" + ini "^1.3.4" + +global@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + dependencies: + min-document "^2.19.0" + process "~0.5.1" globals@^11.0.1, globals@^11.1.0: version "11.3.0" @@ -3559,6 +3997,35 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + dependencies: + delegate "^3.1.2" + got@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" @@ -3575,7 +4042,7 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.11, graceful-fs@~4.1.6: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -3583,6 +4050,15 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" +gray-matter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.1.tgz#375263c194f0d9755578c277e41b1c1dfdf22c7d" + dependencies: + js-yaml "^3.11.0" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + growl@1.9.2: version "1.9.2" resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" @@ -3605,15 +4081,6 @@ har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" @@ -3640,10 +4107,6 @@ has-binary@0.1.7: dependencies: isarray "0.0.1" -has-color@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - has-cors@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" @@ -3660,15 +4123,46 @@ has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" -has-unicode@^2.0.0, has-unicode@~2.0.1: +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + +has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" dependencies: - function-bind "^1.0.2" + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" hash-base@^2.0.0: version "2.0.2" @@ -3719,7 +4213,7 @@ hawk@~6.0.2: hoek "4.x.x" sntp "2.x.x" -he@1.1.1, he@^1.1.0: +he@1.1.1, he@1.1.x, he@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" @@ -3739,6 +4233,13 @@ hoek@4.x.x: version "4.2.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" +hogan.js@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" + dependencies: + mkdirp "0.3.0" + nopt "1.0.10" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -3746,14 +4247,10 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -hosted-git-info@^2.1.4, hosted-git-info@^2.1.5, hosted-git-info@^2.4.2, hosted-git-info@^2.5.0, hosted-git-info@~2.5.0: +hosted-git-info@^2.1.4, hosted-git-info@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" -hosted-git-info@~2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" - html-comment-regex@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" @@ -3764,6 +4261,18 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" +html-minifier@^3.2.3: + version "3.5.15" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.15.tgz#f869848d4543cbfd84f26d5514a2a87cbf9a05e0" + dependencies: + camel-case "3.0.x" + clean-css "4.1.x" + commander "2.15.x" + he "1.1.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.3.x" + htmlparser2@^3.8.2, htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" @@ -3775,9 +4284,21 @@ htmlparser2@^3.8.2, htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^2.0.2" -http-cache-semantics@^3.8.0: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" +htmlparser2@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + +http-assert@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.3.0.tgz#a31a5cf88c873ecbb5796907d4d6f132e8c01e4a" + dependencies: + deep-equal "~1.0.1" + http-errors "~1.6.1" http-errors@1.6.2, http-errors@~1.6.2: version "1.6.2" @@ -3788,12 +4309,14 @@ http-errors@1.6.2, http-errors@~1.6.2: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" -http-proxy-agent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.0.0.tgz#46482a2f0523a4d6082551709f469cb3e4a85ff4" +http-errors@^1.2.8, http-errors@^1.6.1, http-errors@~1.6.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" dependencies: - agent-base "4" - debug "2" + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" http-proxy@^1.13.0: version "1.16.2" @@ -3822,23 +4345,16 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" -https-proxy-agent@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.1.1.tgz#a7ce4382a1ba8266ee848578778122d491260fd9" - dependencies: - agent-base "^4.1.0" - debug "^3.1.0" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - dependencies: - ms "^2.0.0" - -iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: +iconv-lite@0.4.19, iconv-lite@^0.4.17: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +iconv-lite@^0.4.4: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -3853,18 +4369,39 @@ ieee754@^1.1.4: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" -iferr@^0.1.5, iferr@~0.1.5: +iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + ignore@^3.3.3: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" +ignore@^3.3.5: + version "3.3.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.8.tgz#3f8e9c35d38708a3a7e0e9abb6c73e7ee7707b2b" + +immediate@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3887,7 +4424,7 @@ indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" -inflight@^1.0.4, inflight@~1.0.4, inflight@~1.0.6: +inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: @@ -3902,36 +4439,10 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0, ini@~1.3.4: +ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -init-package-json@~1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.1.tgz#cd873a167796befb99612b28762a0b6393fd8f6a" - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - -init-package-json@~1.9.4: - version "1.9.6" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.9.6.tgz#789fc2b74466a4952b9ea77c0575bc78ebd60a61" - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - inquirer@^3.0.6, inquirer@^3.2.2: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" @@ -3965,10 +4476,6 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ip@^1.1.4: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - irregular-plurals@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.4.0.tgz#2ca9b033651111855412f16be5d77c62a458a766" @@ -3977,6 +4484,18 @@ is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + is-alphabetical@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08" @@ -4008,16 +4527,52 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" -is-ci@^1.0.10: +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-ci@^1.0.10, is-ci@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" dependencies: ci-info "^1.0.0" +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + is-decimal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.1.tgz#f5fb6a94996ad9e8e3761fbfbd091f1fca8c4e82" +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" @@ -4032,15 +4587,21 @@ is-equal-shallow@^0.1.3: dependencies: is-primitive "^2.0.0" -is-extendable@^0.1.1: +is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" -is-extglob@^2.1.0: +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -4060,6 +4621,10 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-generator-function@^1.0.3: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -4072,28 +4637,27 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + is-hexadecimal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - -is-my-json-valid@^2.12.4: - version "2.17.2" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" @@ -4114,10 +4678,24 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + +is-number@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-5.0.0.tgz#c393bc471e65de1a10a6abcb20efeb12d2b88166" + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" +is-odd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" + dependencies: + is-number "^4.0.0" + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -4134,10 +4712,16 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -4150,10 +4734,6 @@ is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" @@ -4164,6 +4744,12 @@ is-reference@^1.1.0: dependencies: "@types/estree" "0.0.38" +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -4186,6 +4772,10 @@ is-svg@^2.0.0: dependencies: html-comment-regex "^1.1.0" +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + is-text-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" @@ -4204,7 +4794,7 @@ is-whitespace-character@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz#9ae0176f3282b65457a1992cdb084f8a5f833e3b" -is-windows@^1.0.0: +is-windows@^1.0.0, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -4212,6 +4802,10 @@ is-word-character@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.1.tgz#5a03fa1ea91ace8a6eb0c7cd770eb86d65c8befb" +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -4220,10 +4814,20 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" +isarray@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7" + isbinaryfile@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" +isemail@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.1.2.tgz#937cf919002077999a73ea8b1951d590e84e01dd" + dependencies: + punycode "2.x.x" + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4234,10 +4838,26 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" +javascript-stringify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" + +joi@^11.1.1: + version "11.4.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-11.4.0.tgz#f674897537b625e9ac3d0b7e1604c828ad913ccb" + dependencies: + hoek "4.x.x" + isemail "3.x.x" + topo "2.x.x" + js-base64@^2.1.9: version "2.4.3" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" @@ -4246,6 +4866,13 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" +js-yaml@^3.11.0, js-yaml@^3.9.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^3.4.3, js-yaml@^3.9.1: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" @@ -4315,7 +4942,7 @@ json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: +json-parse-better-errors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" @@ -4355,12 +4982,6 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" -jsonfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -4375,10 +4996,6 @@ jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -4465,7 +5082,15 @@ kew@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" -kind-of@^3.0.2: +keygrip@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91" + +killable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: @@ -4477,12 +5102,114 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" optionalDependencies: graceful-fs "^4.1.9" +koa-compose@^3.0.0, koa-compose@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" + dependencies: + any-promise "^1.1.0" + +koa-compose@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.0.0.tgz#2800a513d9c361ef0d63852b038e4f6f2d5a773c" + +koa-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/koa-connect/-/koa-connect-2.0.1.tgz#2acad159c33862de1d73aa4562a48de13f137c0f" + +koa-convert@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" + dependencies: + co "^4.6.0" + koa-compose "^3.0.0" + +koa-is-json@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" + +koa-mount@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/koa-mount/-/koa-mount-3.0.0.tgz#08cab3b83d31442ed8b7e75c54b1abeb922ec197" + dependencies: + debug "^2.6.1" + koa-compose "^3.2.1" + +koa-send@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-4.1.3.tgz#0822207bbf5253a414c8f1765ebc29fa41353cb6" + dependencies: + debug "^2.6.3" + http-errors "^1.6.1" + mz "^2.6.0" + resolve-path "^1.4.0" + +koa-static@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-4.0.3.tgz#5f93ad00fb1905db9ce46667c0e8bb7d22abfcd8" + dependencies: + debug "^3.1.0" + koa-send "^4.1.3" + +koa-webpack@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/koa-webpack/-/koa-webpack-3.0.2.tgz#5a0604d476ec5ab3f12f02fd5bf8406a77b49ed2" + dependencies: + app-root-path "^2.0.1" + merge-options "^1.0.0" + webpack-dev-middleware "^3.0.0" + webpack-hot-client "^2.0.0" + webpack-log "^1.1.1" + +koa@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.5.1.tgz#79f8b95f8d72d04fe9a58a8da5ebd6d341103f9c" + dependencies: + accepts "^1.2.2" + content-disposition "~0.5.0" + content-type "^1.0.0" + cookies "~0.7.0" + debug "*" + delegates "^1.0.0" + depd "^1.1.0" + destroy "^1.0.3" + error-inject "~1.0.0" + escape-html "~1.0.1" + fresh "^0.5.2" + http-assert "^1.1.0" + http-errors "^1.2.8" + is-generator-function "^1.0.3" + koa-compose "^4.0.0" + koa-convert "^1.2.0" + koa-is-json "^1.0.0" + mime-types "^2.0.7" + on-finished "^2.1.0" + only "0.0.2" + parseurl "^1.3.0" + statuses "^1.2.0" + type-is "^1.5.5" + vary "^1.0.0" + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" @@ -4493,16 +5220,16 @@ lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" -lazy-property@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" dependencies: invert-kv "^1.0.0" +leb@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/leb/-/leb-0.3.0.tgz#32bee9fad168328d6aea8522d833f4180eed1da3" + left-pad@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" @@ -4558,6 +5285,12 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +linkify-it@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.3.tgz#d94a4648f9b1c179d64fa97291268bdb6ce9434f" + dependencies: + uc.micro "^1.0.1" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -4586,11 +5319,15 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +load-script@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" + loader-runner@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" -loader-utils@^0.2.5: +loader-utils@^0.2.16, loader-utils@^0.2.5: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" dependencies: @@ -4618,10 +5355,6 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lockfile@~1.0.1, lockfile@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" - lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" @@ -4637,17 +5370,6 @@ lodash._basecreate@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" -lodash._baseuniq@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - dependencies: - lodash._createset "~4.0.0" - lodash._root "~3.0.0" - -lodash._createset@~4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" @@ -4660,11 +5382,7 @@ lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" -lodash._root@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - -lodash.assign@^4.0.3, lodash.assign@^4.0.6: +lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@~4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" @@ -4672,7 +5390,7 @@ lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" -lodash.clonedeep@~4.5.0: +lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -4704,18 +5422,6 @@ lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" -lodash.pad@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" - -lodash.padend@^4.1.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" - -lodash.padstart@^4.1.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -4733,27 +5439,19 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "~3.0.0" -lodash.union@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - -lodash.uniq@^4.5.0, lodash.uniq@~4.5.0: +lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash.without@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" - -lodash@4.17.4, lodash@^4.0.0, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.1: +lodash@^4.0.0, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +lodash@^4.0.1, lodash@^4.17.3, lodash@^4.17.5: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" @@ -4761,6 +5459,20 @@ lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.2.0, lodash@^4.5.0: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" +log-symbols@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + log4js@^0.6.31: version "0.6.38" resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" @@ -4768,10 +5480,21 @@ log4js@^0.6.31: readable-stream "~1.0.2" semver "~4.3.3" +loglevelnext@^1.0.1, loglevelnext@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" + dependencies: + es6-symbol "^3.1.1" + object.assign "^4.1.0" + lolex@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.6.0.tgz#3a9a0283452a47d7439e72731b9e07d7386e49f6" +long@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -4782,30 +5505,34 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0" -loud-rejection@^1.0.0: +loud-rejection@^1.0.0, loud-rejection@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" dependencies: currently-unhandled "^0.4.1" signal-exit "^3.0.0" +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" -lru-cache@4.1.x, lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@~4.1.1: +lru-cache@4.1.x, lru-cache@^4.0.1, lru-cache@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" dependencies: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" +lru-cache@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" + pseudomap "^1.0.2" + yallist "^2.1.2" macaddress@^0.2.8: version "0.2.8" @@ -4829,21 +5556,9 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -make-fetch-happen@^2.4.13: - version "2.6.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-2.6.0.tgz#8474aa52198f6b1ae4f3094c04e8370d35ea8a38" - dependencies: - agentkeepalive "^3.3.0" - cacache "^10.0.0" - http-cache-semantics "^3.8.0" - http-proxy-agent "^2.0.0" - https-proxy-agent "^2.1.0" - lru-cache "^4.1.1" - mississippi "^1.2.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^3.0.1" - ssri "^5.0.0" +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" @@ -4853,26 +5568,71 @@ map-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + markdown-escapes@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518" -math-expression-evaluator@^1.2.14: - version "1.2.17" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" - -md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" +markdown-it-anchor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-4.0.0.tgz#e87fb5543e01965adf71506c6bf7b0491841b7e3" dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" + string "^3.3.3" -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" +markdown-it-container@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-it-container/-/markdown-it-container-2.0.0.tgz#0019b43fd02eefece2f1960a2895fba81a404695" -mem@^1.1.0: +markdown-it-emoji@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz#9bee0e9a990a963ba96df6980c4fddb05dfb4dcc" + +markdown-it-include@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/markdown-it-include/-/markdown-it-include-1.0.0.tgz#b76b51026d7e5e9c715a77bca464799719346c20" + +markdown-it-table-of-contents@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.3.3.tgz#b62e943c32de2c4a27d3e7c83cd63acbc2a9c4a2" + dependencies: + lodash.assign "~4.2.0" + string "~3.3.3" + +markdown-it@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.1.tgz#206fe59b0e4e1b78a7c73250af9b34a4ad0aaf44" + dependencies: + argparse "^1.0.7" + entities "~1.1.1" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +math-expression-evaluator@^1.2.14: + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + +md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" dependencies: @@ -4914,6 +5674,22 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" +merge-options@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-1.0.1.tgz#2a64b24457becd4e4dc608283247e94ce589aa32" + dependencies: + is-plain-obj "^1.1" + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + dependencies: + source-map "^0.6.1" + +merge2@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" + micromatch@^2.1.5, micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -4932,6 +5708,24 @@ micromatch@^2.1.5, micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -4943,7 +5737,7 @@ mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: +mime-types@^2.0.7, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" dependencies: @@ -4953,10 +5747,27 @@ mime@^1.3.4, mime@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" +mime@^2.0.3, mime@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + dependencies: + dom-walk "^0.1.0" + +mini-css-extract-plugin@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.0.tgz#ff3bf08bee96e618e177c16ca6131bfecef707f9" + dependencies: + loader-utils "^1.1.0" + webpack-sources "^1.1.0" + minimalistic-assert@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" @@ -4965,7 +5776,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.3: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -4994,20 +5805,18 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" -mississippi@^1.2.0, mississippi@^1.3.0, mississippi@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.1.tgz#2a8bb465e86550ac8b36a7b6f45599171d78671e" +minipass@^2.2.1, minipass@^2.2.4: + version "2.3.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.0.tgz#2e11b1c46df7fe7f1afbe9a490280add21ffe384" dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^1.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" + safe-buffer "^5.1.1" + yallist "^3.0.0" + +minizlib@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + dependencies: + minipass "^2.2.1" mississippi@^2.0.0: version "2.0.0" @@ -5024,13 +5833,24 @@ mississippi@^2.0.0: stream-each "^1.1.0" through2 "^2.0.0" +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + mkdirp@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" dependencies: minimist "0.0.8" -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -5082,7 +5902,7 @@ moment@^2.6.0: version "2.20.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" -move-concurrently@^1.0.1, move-concurrently@~1.0.1: +move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" dependencies: @@ -5105,18 +5925,71 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -ms@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - -mute-stream@0.0.7, mute-stream@~0.0.4: +mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" +mz@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + nan@^2.3.0: version "2.9.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" +nan@^2.9.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + +nanoassert@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-1.1.0.tgz#4f3152e09540fde28c76f44b19bbcd1d5a42478d" + +nanobus@^4.3.1: + version "4.3.3" + resolved "https://registry.yarnpkg.com/nanobus/-/nanobus-4.3.3.tgz#a9635d38c687853641e2646bb2be6510cf966233" + dependencies: + nanotiming "^7.2.0" + remove-array-items "^1.0.0" + +nanomatch@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-odd "^2.0.0" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +nanoscheduler@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/nanoscheduler/-/nanoscheduler-1.0.3.tgz#6ca027941bf3e04139ea4bab6227ea6ad803692f" + dependencies: + nanoassert "^1.1.0" + +nanoseconds@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nanoseconds/-/nanoseconds-1.0.1.tgz#596efc62110766be1ede671fedd861f5562318d3" + +nanotiming@^7.2.0: + version "7.3.1" + resolved "https://registry.yarnpkg.com/nanotiming/-/nanotiming-7.3.1.tgz#dc5cf8d9d8ad401a4394d1a9b7a16714bccfefda" + dependencies: + nanoassert "^1.1.0" + nanoscheduler "^1.0.2" + native-promise-only@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" @@ -5125,35 +5998,27 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +needle@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" +neo-async@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz#acb909e327b1e87ec9ef15f41b8a269512ad41ee" -node-gyp@~3.6.0, node-gyp@~3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - minimatch "^3.0.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "2" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" + lower-case "^1.1.1" node-libs-browser@^2.0.0: version "2.1.0" @@ -5183,6 +6048,21 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" +node-pre-gyp@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz#6e4ef5bb5c5203c6552448828c852c40111aac46" + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.0" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.1.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + node-pre-gyp@^0.6.39: version "0.6.39" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" @@ -5199,32 +6079,24 @@ node-pre-gyp@^0.6.39: tar "^2.2.1" tar-pack "^3.4.0" -node-uuid@~1.4.7: - version "1.4.8" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - nodent-runtime@^3.0.3: version "3.2.0" resolved "https://registry.yarnpkg.com/nodent-runtime/-/nodent-runtime-3.2.0.tgz#8b79500a1274176d732b60284c7a7d10d9e44180" -"nopt@2 || 3", nopt@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" +nopt@1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" dependencies: abbrev "1" -nopt@^4.0.1, nopt@~4.0.1: +nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" dependencies: abbrev "1" osenv "^0.1.4" -normalize-git-url@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" - -normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, "normalize-package-data@~1.0.1 || ^2.0.0", normalize-package-data@~2.4.0: +normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: @@ -5233,16 +6105,7 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@~2.3.5: - version "2.3.8" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.0, normalize-path@^2.0.1: +normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: @@ -5261,85 +6124,16 @@ normalize-url@^1.4.0: query-string "^4.1.0" sort-keys "^1.0.0" -npm-cache-filename@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" - -npm-install-checks@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-1.0.7.tgz#6d91aeda0ac96801f1ed7aadee116a6c0a086a57" - dependencies: - npmlog "0.1 || 1 || 2" - semver "^2.3.0 || 3.x || 4 || 5" - -npm-install-checks@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.0.tgz#d4aecdfd51a53e3723b7b2f93b2ee28e307bc0d7" - dependencies: - semver "^2.3.0 || 3.x || 4 || 5" - -"npm-package-arg@^3.0.0 || ^4.0.0", npm-package-arg@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.2.1.tgz#593303fdea85f7c422775f17f9eb7670f680e3ec" - dependencies: - hosted-git-info "^2.1.5" - semver "^5.1.0" - -"npm-package-arg@^3.0.0 || ^4.0.0 || ^5.0.0", "npm-package-arg@^4.0.0 || ^5.0.0", npm-package-arg@^5.1.2, npm-package-arg@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-5.1.2.tgz#fb18d17bb61e60900d6312619919bd753755ab37" - dependencies: - hosted-git-info "^2.4.2" - osenv "^0.1.4" - semver "^5.1.0" - validate-npm-package-name "^3.0.0" - -npm-package-arg@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.1.1.tgz#86d9dca985b4c5e5d59772dfd5de6919998a495a" - dependencies: - hosted-git-info "^2.1.4" - semver "4 || 5" - -npm-pick-manifest@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-1.0.4.tgz#a5ee6510c1fe7221c0bc0414e70924c14045f7e8" - dependencies: - npm-package-arg "^5.1.2" - semver "^5.3.0" - -npm-registry-client@~7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-7.2.1.tgz#c792266b088cc313f8525e7e35248626c723db75" - dependencies: - concat-stream "^1.5.2" - graceful-fs "^4.1.6" - normalize-package-data "~1.0.1 || ^2.0.0" - npm-package-arg "^3.0.0 || ^4.0.0" - once "^1.3.3" - request "^2.74.0" - retry "^0.10.0" - semver "2 >=2.2.1 || 3.x || 4 || 5" - slide "^1.1.3" - optionalDependencies: - npmlog "~2.0.0 || ~3.1.0" +npm-bundled@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" -npm-registry-client@~8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-8.4.0.tgz#d52b901685647fc62a4c03eafecb6ceaa5018d4c" +npm-packlist@^1.1.6: + version "1.1.10" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" dependencies: - concat-stream "^1.5.2" - graceful-fs "^4.1.6" - normalize-package-data "~1.0.1 || ^2.0.0" - npm-package-arg "^3.0.0 || ^4.0.0 || ^5.0.0" - once "^1.3.3" - request "^2.74.0" - retry "^0.10.0" - semver "2 >=2.2.1 || 3.x || 4 || 5" - slide "^1.1.3" - ssri "^4.1.2" - optionalDependencies: - npmlog "2 || ^3.1.0 || ^4.0.0" + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" npm-run-path@^2.0.0: version "2.0.2" @@ -5347,187 +6141,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-user-validate@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-0.1.5.tgz#52465d50c2d20294a57125b996baedbf56c5004b" - -npm-user-validate@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" - -npm@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm/-/npm-5.1.0.tgz#cf8201e044018e9c89532041c90094541982b2c0" - dependencies: - JSONStream "~1.3.1" - abbrev "~1.1.0" - ansi-regex "~3.0.0" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - aproba "~1.1.2" - archy "~1.0.0" - bluebird "~3.5.0" - cacache "~9.2.9" - call-limit "~1.1.0" - chownr "~1.0.1" - cmd-shim "~2.0.2" - columnify "~1.5.4" - config-chain "~1.1.11" - detect-indent "~5.0.0" - dezalgo "~1.0.3" - editor "~1.0.0" - fs-vacuum "~1.2.10" - fs-write-stream-atomic "~1.0.10" - fstream "~1.0.11" - fstream-npm "~1.2.1" - glob "~7.1.2" - graceful-fs "~4.1.11" - has-unicode "~2.0.1" - hosted-git-info "~2.5.0" - iferr "~0.1.5" - inflight "~1.0.6" - inherits "~2.0.3" - ini "~1.3.4" - init-package-json "~1.10.1" - lazy-property "~1.0.0" - lockfile "~1.0.3" - lodash._baseuniq "~4.6.0" - lodash.clonedeep "~4.5.0" - lodash.union "~4.6.0" - lodash.uniq "~4.5.0" - lodash.without "~4.4.0" - lru-cache "~4.1.1" - mississippi "~1.3.0" - mkdirp "~0.5.1" - move-concurrently "~1.0.1" - node-gyp "~3.6.2" - nopt "~4.0.1" - normalize-package-data "~2.4.0" - npm-cache-filename "~1.0.2" - npm-install-checks "~3.0.0" - npm-package-arg "~5.1.2" - npm-registry-client "~8.4.0" - npm-user-validate "~1.0.0" - npmlog "~4.1.2" - once "~1.4.0" - opener "~1.4.3" - osenv "~0.1.4" - pacote "~2.7.38" - path-is-inside "~1.0.2" - promise-inflight "~1.0.1" - read "~1.0.7" - read-cmd-shim "~1.0.1" - read-installed "~4.0.3" - read-package-json "~2.0.9" - read-package-tree "~5.1.6" - readable-stream "~2.3.2" - request "~2.81.0" - retry "~0.10.1" - rimraf "~2.6.1" - safe-buffer "~5.1.1" - semver "~5.3.0" - sha "~2.0.1" - slide "~1.1.6" - sorted-object "~2.0.1" - sorted-union-stream "~2.1.3" - ssri "~4.1.6" - strip-ansi "~4.0.0" - tar "~2.2.1" - text-table "~0.2.0" - uid-number "0.0.6" - umask "~1.1.0" - unique-filename "~1.1.0" - unpipe "~1.0.0" - update-notifier "~2.2.0" - uuid "~3.1.0" - validate-npm-package-name "~3.0.0" - which "~1.2.14" - worker-farm "~1.3.1" - wrappy "~1.0.2" - write-file-atomic "~2.1.0" - -npm@^2.1.12: - version "2.15.12" - resolved "https://registry.yarnpkg.com/npm/-/npm-2.15.12.tgz#df7c3ed5a277c3f9d4b5d819b05311d10a200ae6" - dependencies: - abbrev "~1.0.9" - ansi "~0.3.1" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - archy "~1.0.0" - async-some "~1.0.2" - block-stream "0.0.9" - char-spinner "~1.0.1" - chmodr "~1.0.2" - chownr "~1.0.1" - cmd-shim "~2.0.2" - columnify "~1.5.4" - config-chain "~1.1.10" - dezalgo "~1.0.3" - editor "~1.0.0" - fs-vacuum "~1.2.9" - fs-write-stream-atomic "~1.0.8" - fstream "~1.0.10" - fstream-npm "~1.1.1" - github-url-from-git "~1.4.0" - github-url-from-username-repo "~1.0.2" - glob "~7.0.6" - graceful-fs "~4.1.6" - hosted-git-info "~2.1.5" - inflight "~1.0.4" - inherits "~2.0.3" - ini "~1.3.4" - init-package-json "~1.9.4" - lockfile "~1.0.1" - lru-cache "~4.0.1" - minimatch "~3.0.3" - mkdirp "~0.5.1" - node-gyp "~3.6.0" - nopt "~3.0.6" - normalize-git-url "~3.0.2" - normalize-package-data "~2.3.5" - npm-cache-filename "~1.0.2" - npm-install-checks "~1.0.7" - npm-package-arg "~4.1.0" - npm-registry-client "~7.2.1" - npm-user-validate "~0.1.5" - npmlog "~2.0.4" - once "~1.4.0" - opener "~1.4.1" - osenv "~0.1.3" - path-is-inside "~1.0.0" - read "~1.0.7" - read-installed "~4.0.3" - read-package-json "~2.0.4" - readable-stream "~2.1.5" - realize-package-specifier "~3.0.1" - request "~2.74.0" - retry "~0.10.0" - rimraf "~2.5.4" - semver "~5.1.0" - sha "~2.0.1" - slide "~1.1.6" - sorted-object "~2.0.0" - spdx-license-ids "~1.2.2" - strip-ansi "~3.0.1" - tar "~2.2.1" - text-table "~0.2.0" - uid-number "0.0.6" - umask "~1.1.0" - validate-npm-package-license "~3.0.1" - validate-npm-package-name "~2.2.2" - which "~1.2.11" - wrappy "~1.0.2" - write-file-atomic "~1.1.4" - -npmi@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npmi/-/npmi-1.0.1.tgz#15d769273547545e6809dcf0ce18aed48b0290e2" - dependencies: - npm "^2.1.12" - semver "^4.1.0" - -"npmlog@0 || 1 || 2 || 3 || 4", "npmlog@2 || ^3.1.0 || ^4.0.0", npmlog@^4.0.2, npmlog@^4.1.2, npmlog@~4.1.2: +npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -5536,22 +6150,9 @@ npmi@1.0.1: gauge "~2.7.3" set-blocking "~2.0.0" -"npmlog@0.1 || 1 || 2", npmlog@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" - dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" - -"npmlog@~2.0.0 || ~3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-3.1.2.tgz#2d46fa874337af9498a2f12bb43d8d0be4a36873" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.6.0" - set-blocking "~2.0.0" +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" nth-check@~1.0.1: version "1.0.1" @@ -5587,6 +6188,40 @@ object-component@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.11, object-keys@^1.0.8, object-keys@~1.0.0: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -5594,13 +6229,19 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -on-finished@~2.3.0: +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +on-finished@^2.1.0, on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0, once@~1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -5612,17 +6253,30 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -opener@~1.4.1, opener@~1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" +only@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + +opn@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" + dependencies: + is-wsl "^1.1.0" -optimist@0.6.1, optimist@^0.6.1: +optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" dependencies: minimist "~0.0.1" wordwrap "~0.0.2" +optimize-css-assets-webpack-plugin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-4.0.1.tgz#48f016766752c7648b92cc1e795b999732bd87a2" + dependencies: + cssnano "^3.4.0" + last-call-webpack-plugin "^3.0.0" + optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" @@ -5664,7 +6318,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@0, osenv@^0.1.4, osenv@~0.1.3, osenv@~0.1.4: +osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" dependencies: @@ -5675,7 +6329,7 @@ p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" -p-limit@^1.1.0: +p-limit@^1.0.0, p-limit@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" dependencies: @@ -5700,32 +6354,6 @@ package-json@^4.0.0, package-json@^4.0.1: registry-url "^3.0.3" semver "^5.1.0" -pacote@~2.7.38: - version "2.7.38" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-2.7.38.tgz#5091f8774298c26c3eca24606037f1bb73db74c1" - dependencies: - bluebird "^3.5.0" - cacache "^9.2.9" - glob "^7.1.2" - lru-cache "^4.1.1" - make-fetch-happen "^2.4.13" - minimatch "^3.0.4" - mississippi "^1.2.0" - normalize-package-data "^2.4.0" - npm-package-arg "^5.1.2" - npm-pick-manifest "^1.0.4" - osenv "^0.1.4" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^4.0.0" - safe-buffer "^5.1.1" - semver "^5.3.0" - ssri "^4.1.6" - tar-fs "^1.15.3" - tar-stream "^1.5.4" - unique-filename "^1.1.0" - which "^1.2.12" - pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -5738,6 +6366,12 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + dependencies: + no-case "^2.2.0" + parse-asn1@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" @@ -5817,10 +6451,14 @@ parseuri@0.0.5: dependencies: better-assert "~1.0.0" -parseurl@~1.3.2: +parseurl@^1.3.0, parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" @@ -5839,11 +6477,11 @@ path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-is-absolute@1.0.1, path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.0, path-is-inside@~1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -5959,6 +6597,18 @@ pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" +portfinder@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + postcss-calc@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" @@ -6020,7 +6670,7 @@ postcss-filter-plugins@^2.0.0: postcss "^5.0.4" uniqid "^4.0.0" -postcss-load-config@^1.1.0: +postcss-load-config@^1.1.0, postcss-load-config@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" dependencies: @@ -6043,6 +6693,15 @@ postcss-load-plugins@^2.3.0: cosmiconfig "^2.1.1" object-assign "^4.1.0" +postcss-loader@^2.1.3: + version "2.1.5" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.5.tgz#3c6336ee641c8f95138172533ae461a83595e788" + dependencies: + loader-utils "^1.1.0" + postcss "^6.0.0" + postcss-load-config "^1.2.0" + schema-utils "^0.4.0" + postcss-merge-idents@^2.1.5: version "2.1.7" resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" @@ -6182,6 +6841,14 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: indexes-of "^1.0.1" uniq "^1.0.1" +postcss-selector-parser@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + dependencies: + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss-svgo@^2.1.1: version "2.1.6" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" @@ -6220,6 +6887,14 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 source-map "^0.5.6" supports-color "^3.2.3" +postcss@^6.0.0, postcss@^6.0.20, postcss@^6.0.22: + version "6.0.22" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.22.tgz#e23b78314905c3b90cbd61702121e7a78848f2a3" + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + postcss@^6.0.1, postcss@^6.0.8: version "6.0.19" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555" @@ -6240,10 +6915,25 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +prettier@^1.11.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.12.1.tgz#c1ad20e803e7749faf905a409d2367e06bbe7325" + prettier@^1.7.0: version "1.10.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.10.2.tgz#1af8356d1842276a99a5b5529c82dd9e9ad3cc93" +pretty-bytes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + dependencies: + renderkid "^2.0.1" + utila "~0.4" + pretty-ms@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-3.1.0.tgz#e9cac9c76bf6ee52fe942dd9c6c4213153b12881" @@ -6251,6 +6941,19 @@ pretty-ms@^3.1.0: parse-ms "^1.0.0" plur "^2.1.2" +pretty-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.0.0.tgz#544784adecaa2cd7d045ff8a8f1d4791c8e06e23" + dependencies: + is-number "^5.0.0" + nanoseconds "^1.0.0" + +prismjs@^1.13.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.14.0.tgz#bbccfdb8be5d850d26453933cb50122ca0362ae0" + optionalDependencies: + clipboard "^2.0.0" + private@^0.1.6, private@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -6267,6 +6970,10 @@ process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + progress@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" @@ -6275,38 +6982,15 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" -promise-inflight@^1.0.1, promise-inflight@~1.0.1: +promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - dependencies: - err-code "^1.0.0" - retry "^0.10.0" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - dependencies: - read "1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - -protoduck@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-4.0.0.tgz#fe4874d8c7913366cfd9ead12453a22cd3657f8e" - dependencies: - genfun "^4.0.1" - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" -pseudomap@^1.0.1, pseudomap@^1.0.2: +pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -6320,13 +7004,6 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" -pump@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^2.0.0, pump@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -6346,17 +7023,13 @@ punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -punycode@^2.1.0: +punycode@2.x.x, punycode@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" -q@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" q@^1.1.2, q@^1.4.1, q@^1.5.1: version "1.5.1" @@ -6370,10 +7043,6 @@ qs@6.5.1, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" -qs@~6.2.0: - version "6.2.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" - qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" @@ -6385,7 +7054,7 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -querystring-es3@^0.2.0: +querystring-es3@^0.2.0, querystring-es3@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -6448,46 +7117,12 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -read-cmd-shim@^1.0.1, read-cmd-shim@~1.0.1: +read-cmd-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" dependencies: graceful-fs "^4.1.2" -read-installed@~4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" - dependencies: - debuglog "^1.0.1" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - semver "2 || 3 || 4 || 5" - slide "~1.1.3" - util-extend "^1.0.1" - optionalDependencies: - graceful-fs "^4.1.2" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@~2.0.4, read-package-json@~2.0.9: - version "2.0.12" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.12.tgz#68ea45f98b3741cb6e10ae3bbd42a605026a6951" - dependencies: - glob "^7.1.1" - json-parse-better-errors "^1.0.0" - normalize-package-data "^2.0.0" - slash "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" - -read-package-tree@~5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.1.6.tgz#4f03e83d0486856fb60d97c94882841c2a7b1b7a" - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - once "^1.3.0" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -6533,13 +7168,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read@1, read@~1.0.1, read@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - dependencies: - mute-stream "~0.0.4" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.4, readable-stream@^2.3.3, readable-stream@~2.3.2: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.1.4, readable-stream@^2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071" dependencies: @@ -6551,19 +7180,7 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.0.3" util-deprecate "~1.0.1" -readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readable-stream@~1.0.2: +readable-stream@1.0, readable-stream@~1.0.2: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" dependencies: @@ -6572,47 +7189,18 @@ readable-stream@~1.0.2: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@~1.1.10: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readable-stream@~2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" +readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: - buffer-shims "^1.0.0" core-util-is "~1.0.0" - inherits "~2.0.1" + inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~1.0.6" - string_decoder "~0.10.x" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -6622,13 +7210,6 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -realize-package-specifier@~3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/realize-package-specifier/-/realize-package-specifier-3.0.3.tgz#d0def882952b8de3f67eba5e91199661271f41f4" - dependencies: - dezalgo "^1.0.1" - npm-package-arg "^4.1.1" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -6657,6 +7238,12 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" +reduce@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/reduce/-/reduce-1.0.1.tgz#14fa2e5ff1fc560703a020cbb5fbaab691565804" + dependencies: + object-keys "~1.0.0" + regenerate@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" @@ -6683,6 +7270,13 @@ regex-cache@^0.4.2: dependencies: is-equal-shallow "^0.1.3" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexpu-core@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" @@ -6699,6 +7293,10 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" +register-service-worker@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/register-service-worker/-/register-service-worker-1.2.0.tgz#c0472dcc856e391ba7a87c0aa96c4f6cf1aec67c" + registry-auth-token@^3.0.1: version "3.3.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006" @@ -6722,6 +7320,10 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + remark-parse@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-3.0.1.tgz#1b9f841a44d8f4fbf2246850265459a4eb354c80" @@ -6743,10 +7345,24 @@ remark-parse@^3.0.0: vfile-location "^2.0.0" xtend "^4.0.1" +remove-array-items@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/remove-array-items/-/remove-array-items-1.0.0.tgz#07bf42cb332f4cf6e85ead83b5e4e896d2326b21" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" +renderkid@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" + dependencies: + css-select "^1.1.0" + dom-converter "~0.1" + htmlparser2 "~3.3.0" + strip-ansi "^3.0.0" + utila "~0.3" + repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" @@ -6755,7 +7371,7 @@ repeat-string@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" -repeat-string@^1.5.2, repeat-string@^1.5.4: +repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -6789,34 +7405,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.0" tough-cookie ">=2.3.3" -request@2, request@^2.74.0, request@^2.83.0: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -request@2.81.0, request@~2.81.0: +request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -6870,31 +7459,32 @@ request@^2.81.0: tunnel-agent "^0.6.0" uuid "^3.1.0" -request@~2.74.0: - version "2.74.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" +request@^2.83.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" combined-stream "~1.0.5" - extend "~3.0.0" + extend "~3.0.1" forever-agent "~0.6.1" - form-data "~1.0.0-rc4" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" require-directory@^2.1.1: version "2.1.1" @@ -6904,6 +7494,10 @@ require-from-string@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" +require-from-string@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -6923,16 +7517,43 @@ requires-port@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve-path@^1.3.3, resolve-path@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" + dependencies: + http-errors "~1.6.2" + path-is-absolute "1.0.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + resolve@^1.1.6, resolve@^1.2.0, resolve@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" dependencies: path-parse "^1.0.5" +resolve@^1.6.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + dependencies: + path-parse "^1.0.5" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -6940,9 +7561,9 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -retry@^0.10.0, retry@~0.10.0, retry@~0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" right-align@^0.1.1: version "0.1.3" @@ -6950,18 +7571,12 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" -rimraf@~2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" - dependencies: - glob "^7.0.5" - ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" @@ -7074,40 +7689,72 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-buffer@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + samsam@1.x, samsam@^1.1.3: version "1.3.0" resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50" +sax@0.5.x: + version "0.5.8" + resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" + sax@^1.2.4, sax@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" +schema-utils@^0.4.0, schema-utils@^0.4.3, schema-utils@^0.4.4, schema-utils@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" dependencies: semver "^5.0.3" -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" -semver@5.3.0, semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -semver@^4.1.0, semver@~4.3.3: +semver@~4.3.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" -semver@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19" - serialize-javascript@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" +serialize-javascript@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -7116,6 +7763,24 @@ set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -7124,6 +7789,10 @@ setprototypeof@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.10" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" @@ -7131,13 +7800,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -sha@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sha/-/sha-2.0.1.tgz#6030822fbd2c9823949f8f72ed6411ee5cf25aae" - dependencies: - graceful-fs "^4.1.2" - readable-stream "^2.0.2" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -7179,13 +7841,32 @@ slice-ansi@1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" -slide@^1.1.3, slide@^1.1.5, slide@~1.1.3, slide@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" -smart-buffer@^1.0.13: - version "1.1.15" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" sntp@1.x.x: version "1.0.9" @@ -7243,20 +7924,6 @@ socket.io@1.7.3: socket.io-client "1.7.3" socket.io-parser "2.3.1" -socks-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz#2eae7cf8e2a82d34565761539a7f9718c5617659" - dependencies: - agent-base "^4.1.0" - socks "^1.1.10" - -socks@^1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" - dependencies: - ip "^1.1.4" - smart-buffer "^1.0.13" - sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" @@ -7269,41 +7936,50 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -sorted-object@~2.0.0, sorted-object@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" - -sorted-union-stream@~2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" - dependencies: - from2 "^1.3.0" - stream-iterate "^1.1.0" - source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + source-map-support@^0.4.15, source-map-support@^0.4.6: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" dependencies: source-map "^0.5.6" +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@0.1.x: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + source-map@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -7322,10 +7998,16 @@ spdx-expression-parse@~1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" -spdx-license-ids@^1.0.2, spdx-license-ids@~1.2.2: +spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + split2@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" @@ -7356,13 +8038,7 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" -ssri@^4.1.2, ssri@^4.1.6, ssri@~4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-4.1.6.tgz#0cb49b6ac84457e7bdd466cb730c3cb623e9a25b" - dependencies: - safe-buffer "^5.1.0" - -ssri@^5.0.0, ssri@^5.2.4: +ssri@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.2.4.tgz#9985e14041e65fc397af96542be35724ac11da52" dependencies: @@ -7372,14 +8048,31 @@ state-toggle@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.0.tgz#d20f9a616bb4f0c3b98b91922d25b640aa2bc425" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + "statuses@>= 1.3.1 < 2": version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" +"statuses@>= 1.4.0 < 2", statuses@^1.2.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" +std-env@^1.1.0, std-env@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-1.3.0.tgz#8ce754a401a61f1ac49c8eb55f2a8c0c63d54954" + dependencies: + is-ci "^1.1.0" + stealthy-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -7408,13 +8101,6 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" -stream-iterate@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" - dependencies: - readable-stream "^2.1.5" - stream-shift "^1.0.0" - stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" @@ -7438,6 +8124,10 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string@^3.3.3, string@~3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/string/-/string-3.3.3.tgz#5ea211cd92d228e184294990a6cc97b366a77cb0" + string_decoder@^1.0.0, string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" @@ -7452,18 +8142,22 @@ stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" -strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1: +strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0, strip-ansi@~4.0.0: +strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" dependencies: ansi-regex "^3.0.0" +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -7502,6 +8196,25 @@ strong-log-transformer@^1.0.6: moment "^2.6.0" through "^2.3.4" +stylus-loader@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-3.0.2.tgz#27a706420b05a38e038e7cacb153578d450513c6" + dependencies: + loader-utils "^1.0.2" + lodash.clonedeep "^4.5.0" + when "~3.6.x" + +stylus@^0.54.5: + version "0.54.5" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" + dependencies: + css-parse "1.7.x" + debug "*" + glob "7.0.x" + mkdirp "0.5.x" + sax "0.5.x" + source-map "0.1.x" + supports-color@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" @@ -7530,6 +8243,12 @@ supports-color@^5.2.0: dependencies: has-flag "^3.0.0" +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + dependencies: + has-flag "^3.0.0" + svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -7546,7 +8265,7 @@ symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -table@^4.0.1: +table@^4.0.1, table@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" dependencies: @@ -7561,14 +8280,9 @@ tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" -tar-fs@^1.15.3: - version "1.16.0" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.0.tgz#e877a25acbcc51d8c790da1c57c9cf439817b896" - dependencies: - chownr "^1.0.1" - mkdirp "^0.5.1" - pump "^1.0.0" - tar-stream "^1.1.2" +tapable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" tar-pack@^3.4.0: version "3.4.1" @@ -7583,16 +8297,7 @@ tar-pack@^3.4.0: tar "^2.2.1" uid-number "^0.0.6" -tar-stream@^1.1.2, tar-stream@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.5.tgz#5cad84779f45c83b1f2508d96b09d88c7218af55" - dependencies: - bl "^1.0.0" - end-of-stream "^1.0.0" - readable-stream "^2.0.0" - xtend "^4.0.0" - -tar@^2.0.0, tar@^2.2.1, tar@~2.2.1: +tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: @@ -7600,6 +8305,18 @@ tar@^2.0.0, tar@^2.2.1, tar@~2.2.1: fstream "^1.0.2" inherits "2" +tar@^4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.2.tgz#60685211ba46b38847b1ae7ee1a24d744a2cd462" + dependencies: + chownr "^1.0.1" + fs-minipass "^1.2.5" + minipass "^2.2.4" + minizlib "^1.1.0" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -7640,6 +8357,18 @@ text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + dependencies: + any-promise "^1.0.0" + throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" @@ -7651,10 +8380,14 @@ through2@^2.0.0, through2@^2.0.2: readable-stream "^2.1.5" xtend "~4.0.1" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@~2.3.4: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" +time-fix-plugin@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/time-fix-plugin/-/time-fix-plugin-2.0.1.tgz#4943dd28c8fa36a543aec34e3af2a173abc43de1" + time-stamp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" @@ -7673,6 +8406,10 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +tiny-emitter@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" + tmp@0.0.31: version "0.0.31" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" @@ -7693,6 +8430,10 @@ to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" +to-factory@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-factory/-/to-factory-1.0.0.tgz#8738af8bd97120ad1d4047972ada5563bf9479b1" + to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -7701,6 +8442,38 @@ to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toml@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/toml/-/toml-2.3.3.tgz#8d683d729577cb286231dfc7a8affe58d31728fb" + +topo@2.x.x: + version "2.0.2" + resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182" + dependencies: + hoek "4.x.x" + toposort@^1.0.0: version "1.0.6" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" @@ -7755,10 +8528,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -7773,7 +8542,7 @@ type-detect@^4.0.0: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" -type-is@~1.6.15: +type-is@^1.5.5, type-is@~1.6.15: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" dependencies: @@ -7788,6 +8557,24 @@ typescript@^2.6.2: version "2.7.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.2.tgz#2d615a1ef4aee4f574425cdff7026edf81919836" +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376" + +uglify-es@^3.3.4: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + +uglify-js@3.3.x: + version "3.3.25" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.25.tgz#3266ccb87c5bea229f69041a0296010d6477d539" + dependencies: + commander "~2.15.0" + source-map "~0.6.1" + uglify-js@^2.6, uglify-js@^2.8.29: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" @@ -7809,7 +8596,20 @@ uglifyjs-webpack-plugin@^0.4.6: uglify-js "^2.8.29" webpack-sources "^1.0.1" -uid-number@0.0.6, uid-number@^0.0.6: +uglifyjs-webpack-plugin@^1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz#2ef8387c8f1a903ec5e44fa36f9f3cbdcea67641" + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + schema-utils "^0.4.5" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.3.4" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -7817,10 +8617,6 @@ ultron@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" -umask@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - unherit@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.0.tgz#6b9aaedfbf73df1756ad9e316dd981885840cd7d" @@ -7840,6 +8636,15 @@ unified@^6.1.2: x-is-function "^1.0.4" x-is-string "^0.1.0" +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" @@ -7854,7 +8659,7 @@ uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" -unique-filename@^1.1.0, unique-filename@~1.1.0: +unique-filename@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" dependencies: @@ -7900,23 +8705,60 @@ unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" -update-notifier@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.2.0.tgz#1b5837cf90c0736d88627732b661c138f86de72f" +upath@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + +update-notifier@^2.3.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" dependencies: - boxen "^1.0.0" - chalk "^1.0.0" + boxen "^1.2.1" + chalk "^2.0.1" configstore "^3.0.0" import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" is-npm "^1.0.0" latest-version "^3.0.0" semver-diff "^2.0.0" xdg-basedir "^3.0.0" +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url-join@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-3.0.0.tgz#26e8113ace195ea30d0fc38186e45400f9cea672" + +url-join@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" + +url-loader@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.0.1.tgz#61bc53f1f184d7343da2728a1289ef8722ea45ee" + dependencies: + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^0.4.3" + url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -7930,11 +8772,11 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" -user-home@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" +use@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" dependencies: - os-homedir "^1.0.0" + kind-of "^6.0.2" useragent@^2.1.12: version "2.3.0" @@ -7947,9 +8789,12 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -util-extend@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" util@0.10.3, util@^0.10.3: version "0.10.3" @@ -7957,6 +8802,14 @@ util@0.10.3, util@^0.10.3: dependencies: inherits "2.0.1" +utila@~0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -7969,28 +8822,20 @@ uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" -uuid@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" +v8-compile-cache@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz#8d32e4f16974654657e676e0e467a348e89b0dc4" -validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1: +validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" -validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - dependencies: - builtins "^1.0.3" - -validate-npm-package-name@~2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-2.2.2.tgz#f65695b22f7324442019a3c7fa39a6e7fd299085" - dependencies: - builtins "0.0.7" +vary@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" vendors@^1.0.0: version "1.0.1" @@ -8045,7 +8890,7 @@ vue-class-component@^6.1.2: version "6.2.0" resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-6.2.0.tgz#7adb1daa9a868c75f30f97f33f4f1b94aee62089" -vue-hot-reload-api@^2.2.0: +vue-hot-reload-api@^2.2.0, vue-hot-reload-api@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz#97976142405d13d8efae154749e88c4e358cf926" @@ -8067,6 +8912,16 @@ vue-loader@^13.6.2: vue-style-loader "^3.0.0" vue-template-es2015-compiler "^1.6.0" +vue-loader@^15.0.0-rc.1: + version "15.0.11" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.0.11.tgz#b41dee864cdeb0012c8a2c02a66b13459e45e16e" + dependencies: + "@vue/component-compiler-utils" "^1.2.1" + hash-sum "^1.0.2" + loader-utils "^1.1.0" + vue-hot-reload-api "^2.3.0" + vue-style-loader "^4.1.0" + vue-router@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.1.tgz#d9b05ad9c7420ba0f626d6500d693e60092cc1e9" @@ -8084,6 +8939,19 @@ vue-server-renderer@2.5.13: serialize-javascript "^1.3.0" source-map "0.5.6" +vue-server-renderer@^2.5.16: + version "2.5.16" + resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.5.16.tgz#279ef8e37e502a0de3a9ae30758cc04a472eaac0" + dependencies: + chalk "^1.1.3" + hash-sum "^1.0.2" + he "^1.1.0" + lodash.template "^4.4.0" + lodash.uniq "^4.5.0" + resolve "^1.2.0" + serialize-javascript "^1.3.0" + source-map "0.5.6" + vue-style-loader@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-3.1.2.tgz#6b66ad34998fc9520c2f1e4d5fa4091641c1597a" @@ -8091,6 +8959,13 @@ vue-style-loader@^3.0.0: hash-sum "^1.0.2" loader-utils "^1.0.2" +vue-style-loader@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.0.tgz#7588bd778e2c9f8d87bfc3c5a4a039638da7a863" + dependencies: + hash-sum "^1.0.2" + loader-utils "^1.0.2" + vue-template-compiler@2.5.13: version "2.5.13" resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.13.tgz#12a2aa0ecd6158ac5e5f14d294b0993f399c3d38" @@ -8098,6 +8973,13 @@ vue-template-compiler@2.5.13: de-indent "^1.0.2" he "^1.1.0" +vue-template-compiler@^2.5.16: + version "2.5.16" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.16.tgz#93b48570e56c720cdf3f051cc15287c26fbd04cb" + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + vue-template-es2015-compiler@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18" @@ -8106,6 +8988,84 @@ vue@2.5.13: version "2.5.13" resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.13.tgz#95bd31e20efcf7a7f39239c9aa6787ce8cf578e1" +vue@^2.5.16: + version "2.5.16" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.16.tgz#07edb75e8412aaeed871ebafa99f4672584a0085" + +vuepress-html-webpack-plugin@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vuepress-html-webpack-plugin/-/vuepress-html-webpack-plugin-3.2.0.tgz#219be272ad510faa8750d2d4e70fd028bfd1c16e" + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +vuepress-theme-vue@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/vuepress-theme-vue/-/vuepress-theme-vue-1.0.2.tgz#a8f4b8eb1133467431a51960a144d4783c218897" + +vuepress@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-0.8.4.tgz#13fc2951656551911f1c13ff4d36137d6924dc67" + dependencies: + autoprefixer "^8.2.0" + buble "^0.19.3" + buble-loader "^0.5.0" + chalk "^2.3.2" + chokidar "^2.0.3" + commander "^2.15.1" + connect-history-api-fallback "^1.5.0" + copy-webpack-plugin "^4.5.1" + css-loader "^0.28.11" + diacritics "^1.3.0" + docsearch.js "^2.5.2" + es6-promise "^4.2.4" + escape-html "^1.0.3" + file-loader "^1.1.11" + fs-extra "^5.0.0" + globby "^8.0.1" + gray-matter "^4.0.1" + js-yaml "^3.11.0" + koa-connect "^2.0.1" + koa-mount "^3.0.0" + koa-static "^4.0.2" + loader-utils "^1.1.0" + lru-cache "^4.1.2" + markdown-it "^8.4.1" + markdown-it-anchor "^4.0.0" + markdown-it-container "^2.0.0" + markdown-it-emoji "^1.4.0" + markdown-it-table-of-contents "^0.3.3" + mini-css-extract-plugin "^0.4.0" + nprogress "^0.2.0" + object-assign "^4.1.1" + optimize-css-assets-webpack-plugin "^4.0.0" + portfinder "^1.0.13" + postcss-loader "^2.1.3" + prismjs "^1.13.0" + register-service-worker "^1.2.0" + semver "^5.5.0" + stylus "^0.54.5" + stylus-loader "^3.0.2" + toml "^2.3.3" + url-loader "^1.0.1" + vue "^2.5.16" + vue-loader "^15.0.0-rc.1" + vue-router "^3.0.1" + vue-server-renderer "^2.5.16" + vue-template-compiler "^2.5.16" + vuepress-html-webpack-plugin "^3.2.0" + webpack "^4.5.0" + webpack-chain "^4.6.0" + webpack-merge "^4.1.2" + webpack-serve "^0.3.1" + webpackbar "^2.6.1" + workbox-build "^3.1.0" + vuetify@^0.16.9: version "0.16.9" resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-0.16.9.tgz#fd61f219e4a40d7afe5e24a803df5658a40b38e4" @@ -8128,16 +9088,41 @@ watchpack@^1.4.0: chokidar "^1.7.0" graceful-fs "^4.1.2" +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + wcwidth@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" dependencies: defaults "^1.0.3" +webassemblyjs@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webassemblyjs/-/webassemblyjs-1.4.3.tgz#0591893efb8fbde74498251cbe4b2d83df9239cb" + dependencies: + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/validation" "1.4.3" + "@webassemblyjs/wasm-parser" "1.4.3" + "@webassemblyjs/wast-parser" "1.4.3" + long "^3.2.0" + webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" +webpack-chain@^4.6.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.8.0.tgz#06fc3dbb9f2707d4c9e899fc6250fbcf2afe6fd1" + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^1.6.0" + webpack-dev-middleware@^1.12.0: version "1.12.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" @@ -8148,11 +9133,76 @@ webpack-dev-middleware@^1.12.0: range-parser "^1.0.3" time-stamp "^2.0.0" +webpack-dev-middleware@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.1.3.tgz#8b32aa43da9ae79368c1bf1183f2b6cf5e1f39ed" + dependencies: + loud-rejection "^1.6.0" + memory-fs "~0.4.1" + mime "^2.1.0" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + url-join "^4.0.0" + webpack-log "^1.0.1" + +webpack-hot-client@^2.0.0, webpack-hot-client@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/webpack-hot-client/-/webpack-hot-client-2.2.2.tgz#4a97c513fc22d132573a0cb66ba7f525ff5fc036" + dependencies: + json-stringify-safe "^5.0.1" + loglevelnext "^1.0.2" + uuid "^3.1.0" + webpack-log "^1.1.1" + ws "^4.0.0" + +webpack-log@^1.0.1, webpack-log@^1.1.1, webpack-log@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" + dependencies: + chalk "^2.1.0" + log-symbols "^2.1.0" + loglevelnext "^1.0.1" + uuid "^3.1.0" + +webpack-merge@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.2.tgz#5d372dddd3e1e5f8874f5bf5a8e929db09feb216" + dependencies: + lodash "^4.17.5" + webpack-node-externals@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.6.0.tgz#232c62ec6092b100635a3d29d83c1747128df9bd" -webpack-sources@^1.0.1: +webpack-serve@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/webpack-serve/-/webpack-serve-0.3.2.tgz#9cfd823dd570438d8cf362e70586bc54af1f0c92" + dependencies: + "@shellscape/koa-static" "^4.0.4" + chalk "^2.3.0" + clipboardy "^1.2.2" + cosmiconfig "^4.0.0" + debug "^3.1.0" + find-up "^2.1.0" + get-port "^3.2.0" + import-local "^1.0.0" + killable "^1.0.0" + koa "^2.4.1" + koa-webpack "^3.0.1" + lodash "^4.17.5" + loud-rejection "^1.6.0" + meow "^4.0.0" + nanobus "^4.3.1" + opn "^5.1.0" + resolve "^1.6.0" + time-fix-plugin "^2.0.0" + update-notifier "^2.3.0" + url-join "3.0.0" + v8-compile-cache "^1.1.0" + webpack-hot-client "^2.2.0" + webpack-log "^1.1.2" + +webpack-sources@^1.0.1, webpack-sources@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" dependencies: @@ -8186,6 +9236,48 @@ webpack@^3.0.1: webpack-sources "^1.0.1" yargs "^8.0.2" +webpack@^4.5.0: + version "4.8.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.8.3.tgz#957c8e80000f9e5cc03d775e78b472d8954f4eeb" + dependencies: + "@webassemblyjs/ast" "1.4.3" + "@webassemblyjs/wasm-edit" "1.4.3" + "@webassemblyjs/wasm-parser" "1.4.3" + acorn "^5.0.0" + acorn-dynamic-import "^3.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^0.1.1" + enhanced-resolve "^4.0.0" + eslint-scope "^3.7.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^0.4.4" + tapable "^1.0.0" + uglifyjs-webpack-plugin "^1.2.4" + watchpack "^1.5.0" + webpack-sources "^1.0.1" + +webpackbar@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-2.6.1.tgz#d1aff0665c43635ff35672be2f2463d1176bdb6f" + dependencies: + chalk "^2.3.2" + consola "^1.2.0" + figures "^2.0.0" + loader-utils "^1.1.0" + lodash "^4.17.5" + log-update "^2.3.0" + pretty-time "^1.0.0" + schema-utils "^0.4.5" + std-env "^1.3.0" + table "^4.0.3" + whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" @@ -8200,6 +9292,10 @@ whatwg-url@^6.4.0: tr46 "^1.0.0" webidl-conversions "^4.0.1" +when@~3.6.x: + version "3.6.4" + resolved "https://registry.yarnpkg.com/when/-/when-3.6.4.tgz#473b517ec159e2b85005497a13983f095412e34e" + whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -8212,18 +9308,12 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@1, which@^1.2.10, which@^1.2.12, which@^1.2.9: +which@^1.2.10, which@^1.2.9: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: isexe "^2.0.0" -which@~1.2.11, which@~1.2.14: - version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" - dependencies: - isexe "^2.0.0" - wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" @@ -8256,12 +9346,106 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" -worker-farm@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" +workbox-background-sync@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-3.2.0.tgz#08d4f79fb82fb61f72fbd0359c4b616cc75612d4" dependencies: - errno ">=0.1.1 <0.2.0-0" - xtend ">=4.0.0 <4.1.0-0" + workbox-core "^3.2.0" + +workbox-broadcast-cache-update@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.2.0.tgz#65b4d9b3d4594751ab7ce1fee905c08214118fdc" + dependencies: + workbox-core "^3.2.0" + +workbox-build@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-3.2.0.tgz#01f4a4f6fb5a94dadd3f86d04480c84578fa1125" + dependencies: + babel-runtime "^6.26.0" + common-tags "^1.4.0" + fs-extra "^4.0.2" + glob "^7.1.2" + joi "^11.1.1" + lodash.template "^4.4.0" + pretty-bytes "^4.0.2" + workbox-background-sync "^3.2.0" + workbox-broadcast-cache-update "^3.2.0" + workbox-cache-expiration "^3.2.0" + workbox-cacheable-response "^3.2.0" + workbox-core "^3.2.0" + workbox-google-analytics "^3.2.0" + workbox-precaching "^3.2.0" + workbox-range-requests "^3.2.0" + workbox-routing "^3.2.0" + workbox-strategies "^3.2.0" + workbox-streams "^3.2.0" + workbox-sw "^3.2.0" + +workbox-cache-expiration@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-cache-expiration/-/workbox-cache-expiration-3.2.0.tgz#a585761fd5438e439668afc6f862ac5a0ebca1a8" + dependencies: + workbox-core "^3.2.0" + +workbox-cacheable-response@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-3.2.0.tgz#1d8e3d437d60fb80d971d79545bb27acf1fe7653" + dependencies: + workbox-core "^3.2.0" + +workbox-core@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-3.2.0.tgz#d1bd4209447f5350d8dd6b964c86f054c96ffa0a" + +workbox-google-analytics@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-3.2.0.tgz#1005bc71ae03a8948b687896235dafecb1696c46" + dependencies: + workbox-background-sync "^3.2.0" + workbox-core "^3.2.0" + workbox-routing "^3.2.0" + workbox-strategies "^3.2.0" + +workbox-precaching@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-3.2.0.tgz#36568687a5615d8bd4191b38cf0f489a992d7bbc" + dependencies: + workbox-core "^3.2.0" + +workbox-range-requests@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-3.2.0.tgz#5d6cc3621cef0951fc9c0549053f8e117736d321" + dependencies: + workbox-core "^3.2.0" + +workbox-routing@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-3.2.0.tgz#6aef7622ede2412dd116231f4f9408a6485a4832" + dependencies: + workbox-core "^3.2.0" + +workbox-strategies@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-3.2.0.tgz#6cd5f00739764872b77b4c3766a606e43eb7d246" + dependencies: + workbox-core "^3.2.0" + +workbox-streams@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-3.2.0.tgz#cac0e4f5693b5e13029cbd7e5fec4eb7fcb30d97" + dependencies: + workbox-core "^3.2.0" + +workbox-sw@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-3.2.0.tgz#ccda9adff557ba2233bf1837229144b4a86276cb" + +worker-farm@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + dependencies: + errno "~0.1.7" wrap-ansi@^2.0.0: version "2.1.0" @@ -8270,7 +9454,14 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" -wrappy@1, wrappy@~1.0.2: +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + +wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -8282,22 +9473,6 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.1.4.tgz#b1f52dc2e8dc0e3cb04d187a25f758a38a90ca3b" - dependencies: - graceful-fs "^4.1.2" - imurmurhash "^0.1.4" - slide "^1.1.5" - -write-file-atomic@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" - write-json-file@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" @@ -8360,7 +9535,7 @@ xmlhttprequest-ssl@1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -8372,10 +9547,14 @@ y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" -yallist@^2.0.0, yallist@^2.1.2: +yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + yargs-parser@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" From 78f9410ade26a5a6bb54f3c2beb2141c96ac45ee Mon Sep 17 00:00:00 2001 From: eddyerburgh Date: Sat, 19 May 2018 20:07:54 +0100 Subject: [PATCH 2/9] docs: add japanese translations --- RELEASE_NOTE_1.0.0-beta.16.md | 25 ------ docs/.vuepress/config.js | 30 ++++++- docs/README.md | 4 +- docs/SUMMARY.md | 74 ---------------- docs/api/README.md | 67 ++------------ docs/api/components.md | 87 ------------------- docs/api/components/README.md | 7 ++ docs/api/components/RouterLinkStub.md | 20 +++++ docs/api/components/TransitionGroupStub.md | 31 +++++++ docs/api/components/TransitionStub.md | 30 +++++++ docs/api/config.md | 4 +- docs/api/createLocalVue.md | 2 +- docs/api/mount.md | 2 +- docs/api/render.md | 2 +- docs/api/renderToString.md | 2 +- docs/api/script.sh | 5 -- docs/api/selectors.md | 12 +-- docs/api/shallowMount.md | 2 +- docs/api/wrapper-array/README.md | 9 +- docs/ja/SUMMARY.md | 74 ---------------- docs/ja/api/README.md | 67 ++------------ docs/ja/api/components/README.md | 4 +- docs/ja/api/components/RouterLinkStub.md | 2 +- docs/ja/api/components/TransitionGroupStub.md | 2 +- docs/ja/api/components/TransitionStub.md | 2 +- docs/ja/api/config.md | 16 ++-- docs/ja/api/createLocalVue.md | 2 +- docs/ja/api/mount.md | 2 +- docs/ja/api/options.md | 26 +++--- docs/ja/api/render.md | 2 +- docs/ja/api/renderToString.md | 2 +- docs/ja/api/script.sh | 12 +++ docs/ja/api/selectors.md | 12 +-- docs/ja/api/shallowMount.md | 2 +- docs/ja/api/wrapper-array/README.md | 25 ++++-- docs/ja/api/wrapper-array/at.md | 2 +- docs/ja/api/wrapper-array/contains.md | 2 +- docs/ja/api/wrapper-array/destroy.md | 2 +- docs/ja/api/wrapper-array/filter.md | 2 +- docs/ja/api/wrapper-array/is.md | 2 +- docs/ja/api/wrapper-array/isEmpty.md | 2 +- docs/ja/api/wrapper-array/isVisible.md | 2 +- docs/ja/api/wrapper-array/isVueInstance.md | 2 +- docs/ja/api/wrapper-array/setData.md | 2 +- docs/ja/api/wrapper-array/setMethods.md | 3 +- docs/ja/api/wrapper-array/setProps.md | 2 +- docs/ja/api/wrapper-array/trigger.md | 2 +- docs/ja/api/wrapper/README.md | 45 ++++++++-- docs/ja/api/wrapper/attributes.md | 2 +- docs/ja/api/wrapper/classes.md | 2 +- docs/ja/api/wrapper/contains.md | 2 +- docs/ja/api/wrapper/destroy.md | 2 +- docs/ja/api/wrapper/emitted.md | 2 +- docs/ja/api/wrapper/emittedByOrder.md | 2 +- docs/ja/api/wrapper/exists.md | 2 +- docs/ja/api/wrapper/find.md | 2 +- docs/ja/api/wrapper/findAll.md | 2 +- docs/ja/api/wrapper/html.md | 2 +- docs/ja/api/wrapper/is.md | 2 +- docs/ja/api/wrapper/isEmpty.md | 2 +- docs/ja/api/wrapper/isVisible.md | 2 +- docs/ja/api/wrapper/isVueInstance.md | 2 +- docs/ja/api/wrapper/name.md | 2 +- docs/ja/api/wrapper/props.md | 2 +- docs/ja/api/wrapper/setData.md | 2 +- docs/ja/api/wrapper/setMethods.md | 2 +- docs/ja/api/wrapper/setProps.md | 2 +- docs/ja/api/wrapper/text.md | 2 +- docs/ja/api/wrapper/trigger.md | 2 +- docs/ja/guides/README.md | 20 ++--- docs/ja/guides/choosing-a-test-runner.md | 8 +- docs/ja/guides/common-tips.md | 18 ++-- docs/ja/guides/dom-events.md | 12 +-- docs/ja/guides/getting-started.md | 6 +- docs/ja/guides/testing-SFCs-with-jest.md | 20 ++--- docs/ja/guides/testing-SFCs-with-karma.md | 4 +- .../guides/testing-SFCs-with-mocha-webpack.md | 4 +- docs/ja/guides/testing-async-components.md | 2 +- docs/ja/guides/using-with-vue-router.md | 10 +-- docs/ja/guides/using-with-vuex.md | 7 +- 80 files changed, 344 insertions(+), 546 deletions(-) delete mode 100644 RELEASE_NOTE_1.0.0-beta.16.md delete mode 100644 docs/SUMMARY.md delete mode 100644 docs/api/components.md create mode 100644 docs/api/components/README.md create mode 100644 docs/api/components/RouterLinkStub.md create mode 100644 docs/api/components/TransitionGroupStub.md create mode 100644 docs/api/components/TransitionStub.md delete mode 100755 docs/api/script.sh delete mode 100644 docs/ja/SUMMARY.md create mode 100755 docs/ja/api/script.sh diff --git a/RELEASE_NOTE_1.0.0-beta.16.md b/RELEASE_NOTE_1.0.0-beta.16.md deleted file mode 100644 index 6b0fd5b2c..000000000 --- a/RELEASE_NOTE_1.0.0-beta.16.md +++ /dev/null @@ -1,25 +0,0 @@ - -# [1.0.0-beta.16](https://github.com/vuejs/vue-test-utils/compare/v1.0.0-beta.15...v1.0.0-beta.16) (2018-05-11) - - -### Bug Fixes - -* add cheerio as dependency to server-test-utils ([f3dfb1e](https://github.com/vuejs/vue-test-utils/commit/f3dfb1e)) -* **types:** add sync to WrapperOptions ([#590](https://github.com/vuejs/vue-test-utils/issues/590)) ([570d80d](https://github.com/vuejs/vue-test-utils/commit/570d80d)) -* **types:** improve types ([#593](https://github.com/vuejs/vue-test-utils/issues/593)) ([14c40e6](https://github.com/vuejs/vue-test-utils/commit/14c40e6)) -* **types:** shallow -> shallowMount ([#587](https://github.com/vuejs/vue-test-utils/issues/587)) ([c3e013e](https://github.com/vuejs/vue-test-utils/commit/c3e013e)) -* automatically extend extended child components ([#595](https://github.com/vuejs/vue-test-utils/issues/595)) ([68a55f1](https://github.com/vuejs/vue-test-utils/commit/68a55f1)) -* function names ([#580](https://github.com/vuejs/vue-test-utils/issues/580)) ([d8485f5](https://github.com/vuejs/vue-test-utils/commit/d8485f5)), closes [#544](https://github.com/vuejs/vue-test-utils/issues/544) [#556](https://github.com/vuejs/vue-test-utils/issues/556) -* only order deps if watcher exists ([#583](https://github.com/vuejs/vue-test-utils/issues/583)) ([5e02b92](https://github.com/vuejs/vue-test-utils/commit/5e02b92)) -* overwrites registered components for stubs ([#585](https://github.com/vuejs/vue-test-utils/issues/585)) ([33a6731](https://github.com/vuejs/vue-test-utils/commit/33a6731)) -* remove Array.find ([#572](https://github.com/vuejs/vue-test-utils/issues/572)) ([01686a0](https://github.com/vuejs/vue-test-utils/commit/01686a0)), closes [#499](https://github.com/vuejs/vue-test-utils/issues/499) -* unordered watchers fix ([#584](https://github.com/vuejs/vue-test-utils/issues/584)) ([db8f393](https://github.com/vuejs/vue-test-utils/commit/db8f393)) - - -### Features - -* add `provide` to the global config. ([#555](https://github.com/vuejs/vue-test-utils/issues/555)) ([807d3c8](https://github.com/vuejs/vue-test-utils/commit/807d3c8)) -* support merging in setData ([#565](https://github.com/vuejs/vue-test-utils/issues/565)) ([878bccd](https://github.com/vuejs/vue-test-utils/commit/878bccd)), closes [#563](https://github.com/vuejs/vue-test-utils/issues/563) - - - diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index f3ab678d9..2a3c91e31 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -8,10 +8,12 @@ module.exports = { '/ja/': { lang: 'ja', title: 'Vue Test Utils', + description: 'Vue コンポーネントをテストするためのユーティリティ' }, '/zh/': { lang: 'zh-CN', title: 'Vue Test Utils', + description: '测试 Vue 组件的实用工具' } }, serviceWorker: true, @@ -37,10 +39,11 @@ module.exports = { sidebar: [ '/', '/guides/', + '/api/', '/api/wrapper/', '/api/wrapper-array/', '/api/options', - '/api/components' + '/api/components/' ] }, '/zh/': { @@ -49,9 +52,28 @@ module.exports = { editLinkText: '在 GitHub 上编辑此页' }, '/ja/': { - label: '?', - selectText: '?', - editLinkText: '?' + label: '日本語', + selectText: '言語', + editLinkText: 'GitHub 上でこのページを編集する', + nav: [ + { + text: 'API', + link: '/ja/api/' + }, + { + text: 'ガイド', + link: '/ja/guides/' + } + ], + sidebar: [ + '/ja/', + '/ja/guides/', + '/ja/api/', + '/ja/api/wrapper/', + '/ja/api/wrapper-array/', + '/ja/api/options', + '/ja/api/components/' + ] } } }, diff --git a/docs/README.md b/docs/README.md index dc9789723..8ebb83de8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,9 +1,7 @@ -# Vue Test Utils +# Introduction Vue Test Utils is the official unit testing utility library for Vue.js. -## Table of Contents - * [Guides](./guides/README.md) * [Getting Started](./guides/getting-started.md) * [Common Tips](guides/common-tips.md) diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md deleted file mode 100644 index 7e07b03ec..000000000 --- a/docs/SUMMARY.md +++ /dev/null @@ -1,74 +0,0 @@ -## Table of Contents - -* [Guides](guides/README.md) - * [Getting Started](guides/getting-started.md) - * [Common Tips](guides/common-tips.md) - * [Mouse, Key and other DOM Events](guides/dom-events.md) - * [Choosing a test runner](guides/choosing-a-test-runner.md) - * [Testing SFCs with Jest](guides/testing-SFCs-with-jest.md) - * [Testing SFCs with Mocha + webpack](guides/testing-SFCs-with-mocha-webpack.md) - * [Testing SFCs with Karma](guides/testing-SFCs-with-karma.md) - * [Testing Asynchronous Behavior](guides/testing-async-components.md) - * [Using with Vue Router](guides/using-with-vue-router.md) - * [Using with Vuex](guides/using-with-vuex.md) -* [API](api/README.md) - * [mount](api/mount.md) - * [shallowMount](api/shallowMount.md) - * [render](api/render.md) - * [renderToString](api/renderToString.md) - * [Mounting Options](api/options.md) - - [context](api/options.md#context) - - [slots](api/options.md#slots) - - [scopedSlots](api/options.md#scopedslots) - - [stubs](api/options.md#stubs) - - [mocks](api/options.md#mocks) - - [localVue](api/options.md#localvue) - - [attachToDocument](api/options.md#attachtodocument) - - [attrs](api/options.md#attrs) - - [listeners](api/options.md#listeners) - - [provide](api/options.md#provide) - - [sync](api/options.md#sync) - - [other options](api/options.md#other-options) - * [Wrapper](api/wrapper/README.md) - * [attributes](api/wrapper/attributes.md) - * [classes](api/wrapper/classes.md) - * [contains](api/wrapper/contains.md) - * [emitted](api/wrapper/emitted.md) - * [emittedByOrder](api/wrapper/emittedByOrder.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper/destroy.md) - * [find](api/wrapper/find.md) - * [findAll](api/wrapper/findAll.md) - * [html](api/wrapper/html.md) - * [is](api/wrapper/is.md) - * [isEmpty](api/wrapper/isEmpty.md) - * [isVueInstance](api/wrapper/isVueInstance.md) - * [name](api/wrapper/name.md) - * [props](api/wrapper/props.md) - * [setData](api/wrapper/setData.md) - * [setMethods](api/wrapper/setMethods.md) - * [setProps](api/wrapper/setProps.md) - * [text](api/wrapper/text.md) - * [trigger](api/wrapper/trigger.md) - * [isVisible](api/wrapper/isVisible.md) - * [WrapperArray](api/wrapper-array/README.md) - * [at](api/wrapper-array/at.md) - * [contains](api/wrapper-array/contains.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper-array/destroy.md) - * [filter](api/wrapper-array/filter.md) - * [is](api/wrapper-array/is.md) - * [isEmpty](api/wrapper-array/isEmpty.md) - * [isVueInstance](api/wrapper-array/isVueInstance.md) - * [setData](api/wrapper-array/setData.md) - * [setMethods](api/wrapper-array/setMethods.md) - * [setProps](api/wrapper-array/setProps.md) - * [trigger](api/wrapper-array/trigger.md) - * [isVisible](api/wrapper-array/isVisible.md) - * [components](api/components/README.md) - * [TransitionStub](api/components/TransitionStub.md) - * [TransitionGroupStub](api/components/TransitionGroupStub.md) - * [RouterLinkStub](api/components/RouterLinkStub.md) - * [Selectors](api/selectors.md) - * [createLocalVue](api/createLocalVue.md) - * [config](api/config.md) diff --git a/docs/api/README.md b/docs/api/README.md index 02e303836..d081f89fb 100644 --- a/docs/api/README.md +++ b/docs/api/README.md @@ -1,62 +1,9 @@ # API -* [mount](./mount.md) -* [shallowMount](./shallowMount.md) -* [render](./render.md) -* [renderToString](./renderToString.md) -* [Mounting Options](./options.md) - - [context](./options.md#context) - - [slots](./options.md#slots) - - [scopedSlots](./options.md#scopedslots) - - [stubs](./options.md#stubs) - - [mocks](./options.md#mocks) - - [localVue](./options.md#localvue) - - [attachToDocument](./options.md#attachtodocument) - - [attrs](./options.md#attrs) - - [listeners](./options.md#listeners) - - [provide](./options.md#provide) - - [sync](./options.md#sync) - - [other options](./options.md#other-options) -* [Wrapper](./wrapper/README.md) - * [attributes](./wrapper/attributes.md) - * [classes](./wrapper/classes.md) - * [contains](./wrapper/contains.md) - * [emitted](./wrapper/emitted.md) - * [emittedByOrder](./wrapper/emittedByOrder.md) - * [exists](./wrapper/exists.md) - * [destroy](./wrapper/destroy.md) - * [find](./wrapper/find.md) - * [findAll](./wrapper/findAll.md) - * [html](./wrapper/html.md) - * [is](./wrapper/is.md) - * [isEmpty](./wrapper/isEmpty.md) - * [isVueInstance](./wrapper/isVueInstance.md) - * [name](./wrapper/name.md) - * [props](./wrapper/props.md) - * [setData](./wrapper/setData.md) - * [setMethods](./wrapper/setMethods.md) - * [setProps](./wrapper/setProps.md) - * [text](./wrapper/text.md) - * [trigger](./wrapper/trigger.md) - * [isVisible](./wrapper/isVisible.md) -* [WrapperArray](./wrapper-array/README.md) - * [at](./wrapper-array/at.md) - * [contains](./wrapper-array/contains.md) - * [exists](./wrapper/exists.md) - * [destroy](./wrapper-array/destroy.md) - * [filter](./wrapper-array/filter.md) - * [is](./wrapper-array/is.md) - * [isEmpty](./wrapper-array/isEmpty.md) - * [isVueInstance](./wrapper-array/isVueInstance.md) - * [setData](./wrapper-array/setData.md) - * [setMethods](./wrapper-array/setMethods.md) - * [setProps](./wrapper-array/setProps.md) - * [trigger](./wrapper-array/trigger.md) - * [isVisible](./wrapper-array/isVisible.md) -* [components](./components/README.md) - * [TransitionStub](./components/TransitionStub.md) - * [TransitionGroupStub](./components/TransitionGroupStub.md) - * [RouterLinkStub](./components/RouterLinkStub.md) -* [Selectors](./selectors.md) -* [createLocalVue](./createLocalVue.md) -* [config](./config.md) +!!!include(docs/api/mount.md)!!! +!!!include(docs/api/shallowMount.md)!!! +!!!include(docs/api/render.md)!!! +!!!include(docs/api/renderToString.md)!!! +!!!include(docs/api/selectors.md)!!! +!!!include(docs/api/createLocalVue.md)!!! +!!!include(docs/api/config.md)!!! \ No newline at end of file diff --git a/docs/api/components.md b/docs/api/components.md deleted file mode 100644 index 88fa26295..000000000 --- a/docs/api/components.md +++ /dev/null @@ -1,87 +0,0 @@ -# Components - -Vue Test Utils includes utility components you can use to stub components. - -## RouterLinkStub - -A component to stub the Vue Router `router-link` component. - -You can use this component to find a router-link component in the render tree. - -- **Usage:** - -To set it as a stub in mounting options: - -```js -import { mount, RouterLinkStub } from '@vue/test-utils' - -const wrapper = mount(Component, { - stubs: { - RouterLink: RouterLinkStub - } -}) -expect(wrapper.find(RouterLinkStub).props().to).toBe('/some/path') -``` - -## TransitionStub - -A component to stub the `transition` component. Instead of performing transitions asynchronously, it returns the child component synchronously. - -This is set to stub all `transition` components by default in the Vue Test Utils config. To use the built-in `transition` component set `config.stubs.transition` to false: - -```js -import { config } from '@vue/test-utils' - -config.stubs.transition = false -``` - -To reset it to stub `transition` components: -```js -import { config, TransitionStub } from '@vue/test-utils' - -config.stubs.transition = TransitionStub -``` - -To set it as a stub in mounting options: - -```js -import { mount, TransitionStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - transition: TransitionStub - } -}) -``` - -## TransitionGroupStub - -A component to stub the `transition-group` component. Instead of performing transitions asynchronously, it returns the child components synchronously. - -This is set to stub all `transition-group` components by default in the Vue Test Utils config. To use the built-in `transition-group` component set `config.stubs['transition-group']` to false: - -```js -import { config } from '@vue/test-utils' - -config.stubs['transition-group'] = false -``` - -To reset it to stub `transition-group` components: - -```js -import { config, TransitionGroupStub } from '@vue/test-utils' - -config.stubs['transition-group'] = TransitionGroupStub -``` - -To set it as a stub in mounting options: - -```js -import { mount, TransitionGroupStub } from '@vue/test-utils' - -mount(Component, { - stubs: { - 'transition-group': TransitionGroupStub - } -}) -``` \ No newline at end of file diff --git a/docs/api/components/README.md b/docs/api/components/README.md new file mode 100644 index 000000000..f049bacb5 --- /dev/null +++ b/docs/api/components/README.md @@ -0,0 +1,7 @@ +# Components + +Vue Test Utils includes utility components you can use to stub components. + +!!!include(docs/api/components/RouterLinkStub.md)!!! +!!!include(docs/api/components/TransitionStub.md)!!! +!!!include(docs/api/components/TransitionGroupStub.md)!!! \ No newline at end of file diff --git a/docs/api/components/RouterLinkStub.md b/docs/api/components/RouterLinkStub.md new file mode 100644 index 000000000..344c3c35a --- /dev/null +++ b/docs/api/components/RouterLinkStub.md @@ -0,0 +1,20 @@ +## RouterLinkStub + +A component to stub the Vue Router `router-link` component. + +You can use this component to find a router-link component in the render tree. + +- **Usage:** + +To set it as a stub in mounting options: + +```js +import { mount, RouterLinkStub } from '@vue/test-utils' + +const wrapper = mount(Component, { + stubs: { + RouterLink: RouterLinkStub + } +}) +expect(wrapper.find(RouterLinkStub).props().to).toBe('/some/path') +``` diff --git a/docs/api/components/TransitionGroupStub.md b/docs/api/components/TransitionGroupStub.md new file mode 100644 index 000000000..1f16ff714 --- /dev/null +++ b/docs/api/components/TransitionGroupStub.md @@ -0,0 +1,31 @@ +## TransitionGroupStub + +A component to stub the `transition-group` component. Instead of performing transitions asynchronously, it returns the child components synchronously. + +This is set to stub all `transition-group` components by default in the Vue Test Utils config. To use the built-in `transition-group` component set `config.stubs['transition-group']` to false: + +```js +import { config } from '@vue/test-utils' + +config.stubs['transition-group'] = false +``` + +To reset it to stub `transition-group` components: + +```js +import { config, TransitionGroupStub } from '@vue/test-utils' + +config.stubs['transition-group'] = TransitionGroupStub +``` + +To set it as a stub in mounting options: + +```js +import { mount, TransitionGroupStub } from '@vue/test-utils' + +mount(Component, { + stubs: { + 'transition-group': TransitionGroupStub + } +}) +``` \ No newline at end of file diff --git a/docs/api/components/TransitionStub.md b/docs/api/components/TransitionStub.md new file mode 100644 index 000000000..ae4da6502 --- /dev/null +++ b/docs/api/components/TransitionStub.md @@ -0,0 +1,30 @@ +## TransitionStub + +A component to stub the `transition` component. Instead of performing transitions asynchronously, it returns the child component synchronously. + +This is set to stub all `transition` components by default in the Vue Test Utils config. To use the built-in `transition` component set `config.stubs.transition` to false: + +```js +import { config } from '@vue/test-utils' + +config.stubs.transition = false +``` + +To reset it to stub `transition` components: +```js +import { config, TransitionStub } from '@vue/test-utils' + +config.stubs.transition = TransitionStub +``` + +To set it as a stub in mounting options: + +```js +import { mount, TransitionStub } from '@vue/test-utils' + +mount(Component, { + stubs: { + transition: TransitionStub + } +}) +``` diff --git a/docs/api/config.md b/docs/api/config.md index aacec60fb..3b33cf758 100644 --- a/docs/api/config.md +++ b/docs/api/config.md @@ -1,8 +1,8 @@ -# Config +## Config Vue Test Utils includes a config object to defined options used by Vue Test Utils. -## Vue Test Utils Config Options +### Vue Test Utils Config Options ### `stubs` diff --git a/docs/api/createLocalVue.md b/docs/api/createLocalVue.md index ffbeb7afc..c0a019c8b 100644 --- a/docs/api/createLocalVue.md +++ b/docs/api/createLocalVue.md @@ -1,4 +1,4 @@ -# `createLocalVue()` +## createLocalVue() - **Returns:** - `{Component}` diff --git a/docs/api/mount.md b/docs/api/mount.md index bb5d3c3d0..d14c5a461 100644 --- a/docs/api/mount.md +++ b/docs/api/mount.md @@ -1,4 +1,4 @@ -# `mount(component [, options])` +## mount() - **Arguments:** diff --git a/docs/api/render.md b/docs/api/render.md index 00a77d98b..ca884a4ed 100644 --- a/docs/api/render.md +++ b/docs/api/render.md @@ -1,4 +1,4 @@ -# `render(component [, options])` +## render() - **Arguments:** diff --git a/docs/api/renderToString.md b/docs/api/renderToString.md index df789cf3d..49245cfa9 100644 --- a/docs/api/renderToString.md +++ b/docs/api/renderToString.md @@ -1,4 +1,4 @@ -# `renderToString(component [, options])` +## renderToString() - **Arguments:** diff --git a/docs/api/script.sh b/docs/api/script.sh deleted file mode 100755 index 2ee16a275..000000000 --- a/docs/api/script.sh +++ /dev/null @@ -1,5 +0,0 @@ -FILES=./wrapper/*-e -for f in $FILES -do - rm $f - done diff --git a/docs/api/selectors.md b/docs/api/selectors.md index c1b368621..42e307f45 100644 --- a/docs/api/selectors.md +++ b/docs/api/selectors.md @@ -1,8 +1,8 @@ -# Selectors +## Selectors A lot of methods take a selector as an argument. A selector can either be a CSS selector, a Vue component, or a find option object. -## CSS Selectors +### CSS Selectors Mount handles any valid CSS selector: @@ -19,7 +19,7 @@ You can also use combinators: - adjacent sibling selector (`div + .foo`) - general sibling selector (`div ~ .foo`) -## Vue Components +###Vue Components Vue components are also valid selectors. @@ -39,9 +39,9 @@ const wrapper = shallowMount(Foo) expect(wrapper.is(Foo)).toBe(true) ``` -## Find Option Object +###Find Option Object -### Name +#### Name Using a find option object, Vue Test Utils allows for selecting elements by a `name` of component on wrapper components. @@ -50,7 +50,7 @@ const buttonWrapper = wrapper.find({ name: 'my-button' }) buttonWrapper.trigger('click') ``` -### Ref +#### Ref Using a find option object, Vue Test Utils allows for selecting elements by `$ref` on wrapper components. diff --git a/docs/api/shallowMount.md b/docs/api/shallowMount.md index 0958769d6..5117bd222 100644 --- a/docs/api/shallowMount.md +++ b/docs/api/shallowMount.md @@ -1,4 +1,4 @@ -# `shallowMount(component [, options])` +## shallowMount() - **Arguments:** diff --git a/docs/api/wrapper-array/README.md b/docs/api/wrapper-array/README.md index 09fa44c6b..d3ee35c53 100644 --- a/docs/api/wrapper-array/README.md +++ b/docs/api/wrapper-array/README.md @@ -4,8 +4,13 @@ A `WrapperArray` is an object that contains an array of [`Wrappers`](../wrapper/ ## Properties -`wrappers` `array`: the `Wrappers` contained in the `WrapperArray` -`length` `number`: the number of `Wrappers` contained in the `WrapperArray` +### `wrappers` + +`array`: the `Wrappers` contained in the `WrapperArray` + +### `length` + +`number`: the number of `Wrappers` contained in the `WrapperArray` ## Methods diff --git a/docs/ja/SUMMARY.md b/docs/ja/SUMMARY.md deleted file mode 100644 index 33778ad6a..000000000 --- a/docs/ja/SUMMARY.md +++ /dev/null @@ -1,74 +0,0 @@ -## 目次 - -* [ガイド](guides/README.md) - * [はじめる](guides/getting-started.md) - * [一般的なヒント](guides/common-tips.md) - * [キー、マウス、その他の DOM イベントのテスト](guides/dom-events.md) - * [テストランナを選ぶ](guides/choosing-a-test-runner.md) - * [Jest による単一ファイルコンポーネントのテスト](guides/testing-SFCs-with-jest.md) - * [Mocha + webpack による単一ファイルコンポーネントのテスト](guides/testing-SFCs-with-mocha-webpack.md) - * [Karma による単一ファイルコンポーネントのテスト](guides/testing-SFCs-with-karma.md) - * [非同期動作のテスト](guides/testing-async-components.md) - * [Vue Router と一緒に使う](guides/using-with-vue-router.md) - * [Vuex と一緒に使う](guides/using-with-vuex.md) -* [API](api/README.md) - * [mount](api/mount.md) - * [shallowMount](api/shallowMount.md) - * [render](api/render.md) - * [renderToString](api/renderToString.md) - * [マウンティングオプション](api/options.md) - - [context](api/options.md#context) - - [slots](api/options.md#slots) - - [scopedSlots](api/options.md#scopedslots) - - [stubs](api/options.md#stubs) - - [mocks](api/options.md#mocks) - - [localVue](api/options.md#localvue) - - [attachToDocument](api/options.md#attachtodocument) - - [attrs](api/options.md#attrs) - - [listeners](api/options.md#listeners) - - [provide](api/options.md#provide) - - [sync](api/options.md#sync) - - [その他のオプション](api/options.md#その他のオプション) - * [Wrapper](api/wrapper/README.md) - * [attributes](api/wrapper/attributes.md) - * [classes](api/wrapper/classes.md) - * [contains](api/wrapper/contains.md) - * [emitted](api/wrapper/emitted.md) - * [emittedByOrder](api/wrapper/emittedByOrder.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper/destroy.md) - * [find](api/wrapper/find.md) - * [findAll](api/wrapper/findAll.md) - * [html](api/wrapper/html.md) - * [is](api/wrapper/is.md) - * [isEmpty](api/wrapper/isEmpty.md) - * [isVueInstance](api/wrapper/isVueInstance.md) - * [name](api/wrapper/name.md) - * [props](api/wrapper/props.md) - * [setData](api/wrapper/setData.md) - * [setMethods](api/wrapper/setMethods.md) - * [setProps](api/wrapper/setProps.md) - * [text](api/wrapper/text.md) - * [trigger](api/wrapper/trigger.md) - * [isVisible](api/wrapper/isVisible.md) - * [WrapperArray](api/wrapper-array/README.md) - * [at](api/wrapper-array/at.md) - * [contains](api/wrapper-array/contains.md) - * [exists](api/wrapper/exists.md) - * [destroy](api/wrapper-array/destroy.md) - * [filter](api/wrapper-array/filter.md) - * [is](api/wrapper-array/is.md) - * [isEmpty](api/wrapper-array/isEmpty.md) - * [isVueInstance](api/wrapper-array/isVueInstance.md) - * [setData](api/wrapper-array/setData.md) - * [setMethods](api/wrapper-array/setMethods.md) - * [setProps](api/wrapper-array/setProps.md) - * [trigger](api/wrapper-array/trigger.md) - * [isVisible](api/wrapper-array/isVisible.md) - * [コンポーネント](api/components/README.md) - * [TransitionStub](api/components/TransitionStub.md) - * [TransitionGroupStub](api/components/TransitionGroupStub.md) - * [RouterLinkStub](api/components/RouterLinkStub.md) - * [セレクタ](api/selectors.md) - * [createLocalVue](api/createLocalVue.md) - * [config](api/config.md) diff --git a/docs/ja/api/README.md b/docs/ja/api/README.md index 45b73b9ce..2b2d30a97 100644 --- a/docs/ja/api/README.md +++ b/docs/ja/api/README.md @@ -1,62 +1,9 @@ # API -* [mount](./mount.md) -* [shallowMount](./shallowMount.md) -* [render](./render.md) -* [renderToString](./renderToString.md) -* [マウンティングオプション](./options.md) - - [context](./options.md#context) - - [slots](./options.md#slots) - - [scopedSlots](./options.md#scopedslots) - - [stubs](./options.md#stubs) - - [mocks](./options.md#mocks) - - [localVue](./options.md#localvue) - - [attachToDocument](./options.md#attachtodocument) - - [attrs](./options.md#attrs) - - [listeners](./options.md#listeners) - - [provide](./options.md#provide) - - [sync](./options.md#sync) - - [その他のオプション](./options.md#その他のオプション) -* [Wrapper](./wrapper/README.md) - * [attributes](./wrapper/attributes.md) - * [classes](./wrapper/classes.md) - * [contains](./wrapper/contains.md) - * [emitted](./wrapper/emitted.md) - * [emittedByOrder](./wrapper/emittedByOrder.md) - * [exists](./wrapper/exists.md) - * [destroy](./wrapper/destroy.md) - * [find](./wrapper/find.md) - * [findAll](./wrapper/findAll.md) - * [html](./wrapper/html.md) - * [is](./wrapper/is.md) - * [isEmpty](./wrapper/isEmpty.md) - * [isVueInstance](./wrapper/isVueInstance.md) - * [name](./wrapper/name.md) - * [props](./wrapper/props.md) - * [setData](./wrapper/setData.md) - * [setMethods](./wrapper/setMethods.md) - * [setProps](./wrapper/setProps.md) - * [text](./wrapper/text.md) - * [trigger](./wrapper/trigger.md) - * [isVisible](./wrapper/isVisible.md) -* [WrapperArray](./wrapper-array/README.md) - * [at](./wrapper-array/at.md) - * [contains](./wrapper-array/contains.md) - * [exists](./wrapper/exists.md) - * [destroy](./wrapper-array/destroy.md) - * [filter](./wrapper-array/filter.md) - * [is](./wrapper-array/is.md) - * [isEmpty](./wrapper-array/isEmpty.md) - * [isVueInstance](./wrapper-array/isVueInstance.md) - * [setData](./wrapper-array/setData.md) - * [setMethods](./wrapper-array/setMethods.md) - * [setProps](./wrapper-array/setProps.md) - * [trigger](./wrapper-array/trigger.md) - * [isVisible](./wrapper-array/isVisible.md) -* [コンポーネント](./components/README.md) - * [TransitionStub](./components/TransitionStub.md) - * [TransitionGroupStub](./components/TransitionGroupStub.md) - * [RouterLinkStub](./components/RouterLinkStub.md) -* [セレクタ](./selectors.md) -* [createLocalVue](./createLocalVue.md) -* [config](./config.md) +!!!include(docs/ja/api/mount.md)!!! +!!!include(docs/ja/api/shallowMount.md)!!! +!!!include(docs/ja/api/render.md)!!! +!!!include(docs/ja/api/renderToString.md)!!! +!!!include(docs/ja/api/selectors.md)!!! +!!!include(docs/ja/api/createLocalVue.md)!!! +!!!include(docs/ja/api/config.md)!!! \ No newline at end of file diff --git a/docs/ja/api/components/README.md b/docs/ja/api/components/README.md index ebc2e5f80..b0bf022bb 100644 --- a/docs/ja/api/components/README.md +++ b/docs/ja/api/components/README.md @@ -2,4 +2,6 @@ vue-test-utils にはコンポーネントをスタブするためのユーティリティコンポーネントがあります。 -[TransitionStub](./TransitionStub.md) と [TransitionGroupStub](./TransitionGroupStub.md) はデフォルトで `transition` コンポーネントと `transition-group` コンポーネントをスタブすることに使用されます。 これらのスタブは `config` で変更することができます。 +!!!include(docs/ja/api/components/RouterLinkStub.md)!!! +!!!include(docs/ja/api/components/TransitionStub.md)!!! +!!!include(docs/ja/api/components/TransitionGroupStub.md)!!! \ No newline at end of file diff --git a/docs/ja/api/components/RouterLinkStub.md b/docs/ja/api/components/RouterLinkStub.md index 177a82533..151a81b42 100644 --- a/docs/ja/api/components/RouterLinkStub.md +++ b/docs/ja/api/components/RouterLinkStub.md @@ -1,4 +1,4 @@ -# RouterLinkStub +## RouterLinkStub Vue Router の `router-link` コンポーネントをスタブするためのコンポーネントです。 diff --git a/docs/ja/api/components/TransitionGroupStub.md b/docs/ja/api/components/TransitionGroupStub.md index 8ef23d05a..e1403f47e 100644 --- a/docs/ja/api/components/TransitionGroupStub.md +++ b/docs/ja/api/components/TransitionGroupStub.md @@ -1,4 +1,4 @@ -# TransitionGroupStub +## TransitionGroupStub `transition-group` コンポーネントをスタブするためのコンポーネントです。これはトランジションを非同期で実行する代わりに、子コンポーネントを同期的に返します。 diff --git a/docs/ja/api/components/TransitionStub.md b/docs/ja/api/components/TransitionStub.md index 6c4cddc42..af115a4f9 100644 --- a/docs/ja/api/components/TransitionStub.md +++ b/docs/ja/api/components/TransitionStub.md @@ -1,4 +1,4 @@ -# TransitionStub +## TransitionStub `transition` コンポーネントをスタブするためのコンポーネントです。これはトランジションを非同期で実行する代わりに、子コンポーネントを同期的に返します。 diff --git a/docs/ja/api/config.md b/docs/ja/api/config.md index 9f114afe6..05bfc63f0 100644 --- a/docs/ja/api/config.md +++ b/docs/ja/api/config.md @@ -1,10 +1,10 @@ -# config +## Config vue-test-utils にはオプションを定義するための `config` オプションがあります。 -## `vue-test-utils` `config` オプション +### vue-test-utils` `config` オプション -### `stubs` +#### stubs` - 型: `Object` - デフォルト: `{ @@ -24,7 +24,7 @@ import VueTestUtils from '@vue/test-utils' VueTestUtils.config.stubs['my-component'] = '
' ``` -### `mocks` +#### mocks` - 型: `Object` - デフォルト: `{}` @@ -43,7 +43,7 @@ VueTestUtils.config.mocks['$store'] = { } ``` -### `methods` +#### methods` - 型: `Object` - デフォルト: `{}` @@ -60,7 +60,7 @@ VueTestUtils.config.methods['errors'] = () => { } ``` -### `provide` +#### provide` - 型: `Object` - デフォルト: `{}` @@ -79,12 +79,12 @@ VueTestUtils.config.provide['$logger'] = { } ``` -### `logModifiedComponents` +#### logModifiedComponents` - 型: `Boolean` - デフォルト: `true` -`Vue.extend()` で拡張された子コンポーネントは自動的にスタブされます。その時、そのことを警告するログが表示されます。 `false` をセットすると警告は表示されません。他の config のオプションと違って、マウティングオプションでセットすることはできません。 +`Vue.extend() で拡張された子コンポーネントは自動的にスタブされます。その時、そのことを警告するログが表示されます。 `false` をセットすると警告は表示されません。他の config のオプションと違って、マウティングオプションでセットすることはできません。 例: diff --git a/docs/ja/api/createLocalVue.md b/docs/ja/api/createLocalVue.md index 28ad580c3..967dd88a4 100644 --- a/docs/ja/api/createLocalVue.md +++ b/docs/ja/api/createLocalVue.md @@ -1,4 +1,4 @@ -# createLocalVue() +## createLocalVue() - **戻り値:** - `{Component}` diff --git a/docs/ja/api/mount.md b/docs/ja/api/mount.md index 61d6fa017..7b95d13fd 100644 --- a/docs/ja/api/mount.md +++ b/docs/ja/api/mount.md @@ -1,4 +1,4 @@ -# mount(component [, options]) +## mount() - **引数:** diff --git a/docs/ja/api/options.md b/docs/ja/api/options.md index 2cbe1ec8e..246f53ea8 100644 --- a/docs/ja/api/options.md +++ b/docs/ja/api/options.md @@ -2,8 +2,6 @@ `mount` と `shallowMount` に対するオプション。オプションオブジェクトには、`vue-test-utils` のマウントオプションとその他のオプションを含めることができます。 -## `vue-test-utils` の詳細なマウンティングオプション - - [`context`](#context) - [`slots`](#slots) - [`scopedSlots`](#scopedslots) @@ -16,7 +14,7 @@ - [`provide`](#provide) - [`sync`](#sync) -### `context` +## context - 型: `Object` @@ -34,7 +32,7 @@ const wrapper = mount(Component, { expect(wrapper.is(Component)).toBe(true) ``` -### `slots` +## slots - 型: `{ [name: string]: Array|Component|string }` @@ -56,13 +54,13 @@ const wrapper = shallowMount(Component, { expect(wrapper.find('div')).toBe(true) ``` -#### テキストを渡す +## テキストを渡す テキストを値として `slots` に渡すことはできますが、1つ制限事項があります。 PhantomJS をサポートしません。 代わりに [Puppeteer](https://github.com/karma-runner/karma-chrome-launcher#headless-chromium-with-puppeteer) を使用してください。 -### `scopedSlots` +## scopedSlots - 型: `{ [name: string]: string }` @@ -88,7 +86,7 @@ const wrapper = shallowMount(Component, { expect(wrapper.find('#fooWrapper').html()).toBe('

0,text1

1,text2

2,text3

') ``` -### `stubs` +## stubs - type: `{ [name: string]: Component | boolean } | Array` @@ -113,7 +111,7 @@ shallowMount(Component, { }) ``` -### `mocks` +## mocks - 型: `Object` @@ -131,7 +129,7 @@ const wrapper = shallowMount(Component, { expect(wrapper.vm.$route.path).toBe($route.path) ``` -### `localVue` +## localVue - 型: `Vue` @@ -162,32 +160,32 @@ const wrapper = mount(Component, { expect(wrapper.vm.$route).toBeInstanceOf(Object) ``` -### `attachToDocument` +## attachToDocument - 型: `boolean` - デフォルト: `false` `true` に設定されている場合、描画時にコンポーネントは DOM にアタッチされます。 -### `attrs` +## attrs - 型: `Object` コンポーネントインスタンスの `$attrs` オブジェクトを設定します。 -### `listeners` +## listeners - 型: `Object` コンポーネントインスタンスの `$listeners` オブジェクトを設定します。 -### `provide` +## provide - 型: `Object` コンポーネントに指定したプロパティを注入します。[provide/inject](https://vuejs.org/v2/api/#provide-inject) を参照してください。 -### `sync` +## sync - 型: `boolean` - デフォルト: `true` diff --git a/docs/ja/api/render.md b/docs/ja/api/render.md index c6c0dfa44..23d4e6ad7 100644 --- a/docs/ja/api/render.md +++ b/docs/ja/api/render.md @@ -1,4 +1,4 @@ -# `render(component {, options}])` +## render() - **引数:** diff --git a/docs/ja/api/renderToString.md b/docs/ja/api/renderToString.md index b8a5e1620..eafc2f9e4 100644 --- a/docs/ja/api/renderToString.md +++ b/docs/ja/api/renderToString.md @@ -1,4 +1,4 @@ -# `renderToString(component {, options}])` +## renderToString() - **引数:** diff --git a/docs/ja/api/script.sh b/docs/ja/api/script.sh new file mode 100755 index 000000000..453be596e --- /dev/null +++ b/docs/ja/api/script.sh @@ -0,0 +1,12 @@ +# FILES=./wrapper-array/* +# for f in $FILES +# do + +# # sed -i -e 's/# `/## /g' $f && sed -i -e 's/)`/)/g' $f +# # rm "$f" +# done + +for file in ./wrapper/*.md-e +do + rm $file +done \ No newline at end of file diff --git a/docs/ja/api/selectors.md b/docs/ja/api/selectors.md index 274be49bd..abef22b0a 100644 --- a/docs/ja/api/selectors.md +++ b/docs/ja/api/selectors.md @@ -1,8 +1,8 @@ -# セレクタ +## セレクタ 多くのメソッドがセレクタを引数とします。セレクタは、CSS セレクタ、 Vue コンポーネント、または find メソッドのオプションオブジェクトのいずれかです。 -## CSS セレクタ +### CSS セレクタ マウントは有効な CSS セレクタを処理します。 @@ -19,7 +19,7 @@ - 隣接する兄弟のセレクタ (div + .foo) - 一般兄弟セレクタ (div ~ .foo) -## Vue コンポーネント +### Vue コンポーネント Vue コンポーネントもセレクタとして有効です。 @@ -39,9 +39,9 @@ const wrapper = shallowMount(Foo) expect(wrapper.is(Foo)).toBe(true) ``` -## find メソッドのオプションオブジェクト +### find メソッドのオプションオブジェクト -### name +#### name find メソッドのオプションオブジェクトを使用すると、Wrapper コンポーネント内にあるコンポーネントの `name` に一致する要素を取得することができます。 @@ -50,7 +50,7 @@ const buttonWrapper = wrapper.find({ name: 'my-button' }) buttonWrapper.trigger('click') ``` -### ref +#### ref find メソッドのオプションオブジェクトを使用すると、Wrapper コンポーネントの `$ref` プロパティに一致する要素を取得することができます。 diff --git a/docs/ja/api/shallowMount.md b/docs/ja/api/shallowMount.md index 883c1a5aa..1b93e009a 100644 --- a/docs/ja/api/shallowMount.md +++ b/docs/ja/api/shallowMount.md @@ -1,4 +1,4 @@ -# shallowMount(component [, options]) +## shallowMount() - **引数:** diff --git a/docs/ja/api/wrapper-array/README.md b/docs/ja/api/wrapper-array/README.md index d29e872c1..12c940c8e 100644 --- a/docs/ja/api/wrapper-array/README.md +++ b/docs/ja/api/wrapper-array/README.md @@ -2,11 +2,26 @@ `WrapperArray` は、[Wrapper](../wrapper/README.md) の配列と `Wrapper` をテストするメソッドを含むオブジェクトです。 -- **プロパティ:** +## プロパティ -`wrappers` `array`: `WrapperArray` に含まれる `Wrappers` -`length` `number`: `WrapperArray` に含まれる `Wrappers` の数 +### `wrappers` - - **メソッド:** +`array`: `WrapperArray` に含まれる `Wrappers` -ドキュメントの WrapperArray セクションには、詳細なメソッドのリストがあります。 +### `length` + +`number`: `WrapperArray` に含まれる `Wrappers` の数 + +## メソッド + +!!!include(docs/ja/api/wrapper-array/at.md)!!! +!!!include(docs/ja/api/wrapper-array/contains.md)!!! +!!!include(docs/ja/api/wrapper-array/destroy.md)!!! +!!!include(docs/ja/api/wrapper-array/filter.md)!!! +!!!include(docs/ja/api/wrapper-array/is.md)!!! +!!!include(docs/ja/api/wrapper-array/isEmpty.md)!!! +!!!include(docs/ja/api/wrapper-array/isVueInstance.md)!!! +!!!include(docs/ja/api/wrapper-array/setData.md)!!! +!!!include(docs/ja/api/wrapper-array/setMethods.md)!!! +!!!include(docs/ja/api/wrapper-array/setProps.md)!!! +!!!include(docs/ja/api/wrapper-array/trigger.md)!!! \ No newline at end of file diff --git a/docs/ja/api/wrapper-array/at.md b/docs/ja/api/wrapper-array/at.md index 95c41ea25..d639bcc5f 100644 --- a/docs/ja/api/wrapper-array/at.md +++ b/docs/ja/api/wrapper-array/at.md @@ -1,4 +1,4 @@ -# at(index) +## at(index) 渡された `index` の `Wrapper` を返します。ゼロベースの番号付けを使用します(つまり、最初のアイテムはインデックス 0 になります)。 diff --git a/docs/ja/api/wrapper-array/contains.md b/docs/ja/api/wrapper-array/contains.md index c12beed52..12f9b2eae 100644 --- a/docs/ja/api/wrapper-array/contains.md +++ b/docs/ja/api/wrapper-array/contains.md @@ -1,4 +1,4 @@ -# contains(selector) +## contains(selector) `WrapperArray` のすべての Wrapper にセレクタが含まれているか検証します。 diff --git a/docs/ja/api/wrapper-array/destroy.md b/docs/ja/api/wrapper-array/destroy.md index 6e98009eb..0b67046c5 100644 --- a/docs/ja/api/wrapper-array/destroy.md +++ b/docs/ja/api/wrapper-array/destroy.md @@ -1,4 +1,4 @@ -# destroy() +## destroy() `WrapperArray` のすべての Vue コンポーネントインスタンスを破棄します。 diff --git a/docs/ja/api/wrapper-array/filter.md b/docs/ja/api/wrapper-array/filter.md index ae9f4842f..ea727d932 100644 --- a/docs/ja/api/wrapper-array/filter.md +++ b/docs/ja/api/wrapper-array/filter.md @@ -1,4 +1,4 @@ -# filter(predicate) +## filter(predicate) `Wrapper` オブジェクトを判別する関数を使用して `WrapperArray` をフィルタリングします。 diff --git a/docs/ja/api/wrapper-array/is.md b/docs/ja/api/wrapper-array/is.md index be75481f8..950ae56af 100644 --- a/docs/ja/api/wrapper-array/is.md +++ b/docs/ja/api/wrapper-array/is.md @@ -1,4 +1,4 @@ -# is(selector) +## is(selector) `WrapperArray` の全ての `Wrapper` のDOMノード、もしくは[セレクタ](../selectors.md)が `vm` とマッチするか検証します。 diff --git a/docs/ja/api/wrapper-array/isEmpty.md b/docs/ja/api/wrapper-array/isEmpty.md index 0b295602a..d795b8d79 100644 --- a/docs/ja/api/wrapper-array/isEmpty.md +++ b/docs/ja/api/wrapper-array/isEmpty.md @@ -1,4 +1,4 @@ -# isEmpty() +## isEmpty() `WrapperArray` のすべての `Wrapper` に子ノードを含んでいないか検証します。 diff --git a/docs/ja/api/wrapper-array/isVisible.md b/docs/ja/api/wrapper-array/isVisible.md index 091de8793..77e302d50 100644 --- a/docs/ja/api/wrapper-array/isVisible.md +++ b/docs/ja/api/wrapper-array/isVisible.md @@ -1,4 +1,4 @@ -# isVisible() +## isVisible() `WrapperArray` 内のすべての `Wrapper` が表示されているかアサートします。 diff --git a/docs/ja/api/wrapper-array/isVueInstance.md b/docs/ja/api/wrapper-array/isVueInstance.md index 9e9855875..1e525429b 100644 --- a/docs/ja/api/wrapper-array/isVueInstance.md +++ b/docs/ja/api/wrapper-array/isVueInstance.md @@ -1,4 +1,4 @@ -# isVueInstance() +## isVueInstance() `WrapperArray` の全ての `Wrapper` が Vue インスタンスであるか検証します。 diff --git a/docs/ja/api/wrapper-array/setData.md b/docs/ja/api/wrapper-array/setData.md index 7467aeb00..3d82601fa 100644 --- a/docs/ja/api/wrapper-array/setData.md +++ b/docs/ja/api/wrapper-array/setData.md @@ -1,4 +1,4 @@ -# setData(data) +## setData(data) `WrapperArray` の `Wrapper` ごとに `Wrapper` に `vm` データをセットし、強制的に更新します。 diff --git a/docs/ja/api/wrapper-array/setMethods.md b/docs/ja/api/wrapper-array/setMethods.md index 645fa5d25..aa709889f 100644 --- a/docs/ja/api/wrapper-array/setMethods.md +++ b/docs/ja/api/wrapper-array/setMethods.md @@ -1,5 +1,4 @@ - -# setMethods(methods) +## setMethods(methods) `WrapperArray` の `Wrapper` ごとに `Wrapper` に `vm` メソッドをセットし、強制的に更新します。 diff --git a/docs/ja/api/wrapper-array/setProps.md b/docs/ja/api/wrapper-array/setProps.md index 1d50991aa..edb1cbc03 100644 --- a/docs/ja/api/wrapper-array/setProps.md +++ b/docs/ja/api/wrapper-array/setProps.md @@ -1,4 +1,4 @@ -# setProps(props) +## setProps(props) `WrapperArray` の `Wrapper` ごとに `Wrapper` に `vm` プロパティをセットし、強制的に更新します。 diff --git a/docs/ja/api/wrapper-array/trigger.md b/docs/ja/api/wrapper-array/trigger.md index f6e3ecdb1..c51d4d97e 100644 --- a/docs/ja/api/wrapper-array/trigger.md +++ b/docs/ja/api/wrapper-array/trigger.md @@ -1,4 +1,4 @@ -# trigger(eventName [, options]) +## trigger(eventName [, options]) `WrapperArray` の DOM ノードのすべての `Wrapper` でイベントを発火します。 diff --git a/docs/ja/api/wrapper/README.md b/docs/ja/api/wrapper/README.md index f6863514d..3cfaa6bcc 100644 --- a/docs/ja/api/wrapper/README.md +++ b/docs/ja/api/wrapper/README.md @@ -4,13 +4,44 @@ vue-test-utils はラッパベースの API です。 `Wrapper` は、マウントされたコンポーネントと仮想 DOM 、またはコンポーネントと仮想 DOM をテストするメソッドを含むオブジェクトです。 -- **プロパティ:** +## プロパティ -`vm` `Component`:これは vue のインスタンスです。`wrapper.vm` を使って [vm のプロパティとインスタンスメソッド](https://jp.vuejs.org/v2/api/#インスタンスプロパティ)にアクセスできます。これは、Vue コンポーネントラッパにのみ存在します。 -`element` `HTMLElement`: ラッパのルート DOM -`options` `Object`: `mount` または `shallowMount` に渡された vue-test-utils オプションを含むオブジェクト -`options.attachedToDom` `Boolean`: `mount` か `shallowMount` に渡された場合は True です。 +### `vm` -- **メソッド:** +`Component`:これは vue のインスタンスです。`wrapper.vm` を使って [vm のプロパティとインスタンスメソッド](https://jp.vuejs.org/v2/api/#インスタンスプロパティ)にアクセスできます。これは、Vue コンポーネントラッパにのみ存在します。 -ドキュメントの wrapper セクションにはメソッドの詳細が一覧になっています。 +### `element` + +`HTMLElement`: ラッパのルート DOM + +### `options` + +`Object`: `mount` または `shallowMount` に渡された vue-test-utils オプションを含むオブジェクト + +#### `options.attachedToDom` + +`Boolean`: `mount` か `shallowMount` に渡された場合は True です。 + +## メソッド + +!!!include(docs/ja/api/wrapper/attributes.md)!!! +!!!include(docs/ja/api/wrapper/classes.md)!!! +!!!include(docs/ja/api/wrapper/contains.md)!!! +!!!include(docs/ja/api/wrapper/destroy.md)!!! +!!!include(docs/ja/api/wrapper/emitted.md)!!! +!!!include(docs/ja/api/wrapper/emittedByOrder.md)!!! +!!!include(docs/ja/api/wrapper/exists.md)!!! +!!!include(docs/ja/api/wrapper/find.md)!!! +!!!include(docs/ja/api/wrapper/findAll.md)!!! +!!!include(docs/ja/api/wrapper/html.md)!!! +!!!include(docs/ja/api/wrapper/is.md)!!! +!!!include(docs/ja/api/wrapper/isEmpty.md)!!! +!!!include(docs/ja/api/wrapper/isVisible.md)!!! +!!!include(docs/ja/api/wrapper/isVueInstance.md)!!! +!!!include(docs/ja/api/wrapper/name.md)!!! +!!!include(docs/ja/api/wrapper/props.md)!!! +!!!include(docs/ja/api/wrapper/setData.md)!!! +!!!include(docs/ja/api/wrapper/setMethods.md)!!! +!!!include(docs/ja/api/wrapper/setProps.md)!!! +!!!include(docs/ja/api/wrapper/text.md)!!! +!!!include(docs/ja/api/wrapper/trigger.md)!!! diff --git a/docs/ja/api/wrapper/attributes.md b/docs/ja/api/wrapper/attributes.md index 62d2bb2e0..dcf16eff4 100644 --- a/docs/ja/api/wrapper/attributes.md +++ b/docs/ja/api/wrapper/attributes.md @@ -1,4 +1,4 @@ -# attributes() +### attributes() `Wrapper` にラップされている要素の属性をオブジェクトで返します。 diff --git a/docs/ja/api/wrapper/classes.md b/docs/ja/api/wrapper/classes.md index 7e98d3960..7b0d44160 100644 --- a/docs/ja/api/wrapper/classes.md +++ b/docs/ja/api/wrapper/classes.md @@ -1,4 +1,4 @@ -# classes() +## classes() `Wrapper` にラップされている要素の class 名を配列で返します。 diff --git a/docs/ja/api/wrapper/contains.md b/docs/ja/api/wrapper/contains.md index ef002b08b..955ad6d71 100644 --- a/docs/ja/api/wrapper/contains.md +++ b/docs/ja/api/wrapper/contains.md @@ -1,4 +1,4 @@ -# contains(selector) +## contains(selector) `Wrapper` に要素、もしくは[セレクタ](../selectors.md)で指定したコンポーネントを含んでいるか検証します。 diff --git a/docs/ja/api/wrapper/destroy.md b/docs/ja/api/wrapper/destroy.md index a769c6367..b5e9e43bb 100644 --- a/docs/ja/api/wrapper/destroy.md +++ b/docs/ja/api/wrapper/destroy.md @@ -1,4 +1,4 @@ -# destroy() +## destroy() Vue コンポーネントインスタンスを破棄します。 diff --git a/docs/ja/api/wrapper/emitted.md b/docs/ja/api/wrapper/emitted.md index db350c328..60a796758 100644 --- a/docs/ja/api/wrapper/emitted.md +++ b/docs/ja/api/wrapper/emitted.md @@ -1,4 +1,4 @@ -# emitted() +## emitted() `Wrapper` `vm` によって生成されたカスタムイベントを含むオブジェクトを返します。 diff --git a/docs/ja/api/wrapper/emittedByOrder.md b/docs/ja/api/wrapper/emittedByOrder.md index 21337a24b..89d104ab7 100644 --- a/docs/ja/api/wrapper/emittedByOrder.md +++ b/docs/ja/api/wrapper/emittedByOrder.md @@ -1,4 +1,4 @@ -# emittedByOrder() +## emittedByOrder() `Wrapper` `vm` によって生成されたカスタムイベントを含む配列を返します。 diff --git a/docs/ja/api/wrapper/exists.md b/docs/ja/api/wrapper/exists.md index 611f8aa29..836f7cac3 100644 --- a/docs/ja/api/wrapper/exists.md +++ b/docs/ja/api/wrapper/exists.md @@ -1,4 +1,4 @@ -# exists() +## exists() `Wrapper` か `WrapperArray` が存在するか検証します。 diff --git a/docs/ja/api/wrapper/find.md b/docs/ja/api/wrapper/find.md index 436016301..9fb2c11af 100644 --- a/docs/ja/api/wrapper/find.md +++ b/docs/ja/api/wrapper/find.md @@ -1,4 +1,4 @@ -# find(selector) +## find(selector) 最初の DOM ノードの [Wrapper](./README.md)、またはセレクタで一致した Vue コンポーネントを返します。 diff --git a/docs/ja/api/wrapper/findAll.md b/docs/ja/api/wrapper/findAll.md index 90eac71f2..ff382ebec 100644 --- a/docs/ja/api/wrapper/findAll.md +++ b/docs/ja/api/wrapper/findAll.md @@ -1,4 +1,4 @@ -# findAll(selector) +## findAll(selector) [`WrapperArray`](../wrapper-array/README.md)を返します。 diff --git a/docs/ja/api/wrapper/html.md b/docs/ja/api/wrapper/html.md index 81955bc5c..2cdfe035f 100644 --- a/docs/ja/api/wrapper/html.md +++ b/docs/ja/api/wrapper/html.md @@ -1,4 +1,4 @@ -# html() +## html() `Wrapper` DOM ノードの HTML を文字列として返します。 diff --git a/docs/ja/api/wrapper/is.md b/docs/ja/api/wrapper/is.md index 7f3073e88..a8ce3e1ba 100644 --- a/docs/ja/api/wrapper/is.md +++ b/docs/ja/api/wrapper/is.md @@ -1,4 +1,4 @@ -# is(selector) +## is(selector) `Wrapper` DOM ノード、または `vm` が[セレクタ](../selectors.md)と一致しているか検証します。 diff --git a/docs/ja/api/wrapper/isEmpty.md b/docs/ja/api/wrapper/isEmpty.md index aee59081b..16c06e294 100644 --- a/docs/ja/api/wrapper/isEmpty.md +++ b/docs/ja/api/wrapper/isEmpty.md @@ -1,4 +1,4 @@ -# isEmpty() +## isEmpty() `Wrapper` が子ノードを含んでいないか検証します。 diff --git a/docs/ja/api/wrapper/isVisible.md b/docs/ja/api/wrapper/isVisible.md index 00af11178..9b3df4cc1 100644 --- a/docs/ja/api/wrapper/isVisible.md +++ b/docs/ja/api/wrapper/isVisible.md @@ -1,4 +1,4 @@ -# isVisible() +## isVisible() `Wrapper` が表示されているかアサートします。 diff --git a/docs/ja/api/wrapper/isVueInstance.md b/docs/ja/api/wrapper/isVueInstance.md index 61bb5e47f..b4a7fa27a 100644 --- a/docs/ja/api/wrapper/isVueInstance.md +++ b/docs/ja/api/wrapper/isVueInstance.md @@ -1,4 +1,4 @@ -# isVueInstance() +## isVueInstance() `Wrapper` が Vue インスタンスか検証します。 diff --git a/docs/ja/api/wrapper/name.md b/docs/ja/api/wrapper/name.md index 40b48db29..7977e5086 100644 --- a/docs/ja/api/wrapper/name.md +++ b/docs/ja/api/wrapper/name.md @@ -1,4 +1,4 @@ -# name() +## name() `Wrapper` に Vue インスタンスが含まれている場合はコンポーネント名を返し、そうでない場合は `Wrapper` DOM ノードのタグ名を返します。 diff --git a/docs/ja/api/wrapper/props.md b/docs/ja/api/wrapper/props.md index 9897bf02b..6eb6084d9 100644 --- a/docs/ja/api/wrapper/props.md +++ b/docs/ja/api/wrapper/props.md @@ -1,4 +1,4 @@ -# props() +## props() `Wrapper` の `vm` プロパティの props オブジェクトを返します。 diff --git a/docs/ja/api/wrapper/setData.md b/docs/ja/api/wrapper/setData.md index a0b431bb4..e346a786f 100644 --- a/docs/ja/api/wrapper/setData.md +++ b/docs/ja/api/wrapper/setData.md @@ -1,4 +1,4 @@ -# setData(data) +## setData(data) `Wrapper` `vm` データを設定し、更新を強制します。 diff --git a/docs/ja/api/wrapper/setMethods.md b/docs/ja/api/wrapper/setMethods.md index 7b6cd04af..754943ea6 100644 --- a/docs/ja/api/wrapper/setMethods.md +++ b/docs/ja/api/wrapper/setMethods.md @@ -1,4 +1,4 @@ -# setMethods(methods) +## setMethods(methods) `Wrapper` `vm` メソッドを設定し、更新を強制します。 diff --git a/docs/ja/api/wrapper/setProps.md b/docs/ja/api/wrapper/setProps.md index fe4489b6c..54ca48444 100644 --- a/docs/ja/api/wrapper/setProps.md +++ b/docs/ja/api/wrapper/setProps.md @@ -1,4 +1,4 @@ -# setProps(props) +## setProps(props) - **引数:** - `{Object} props` diff --git a/docs/ja/api/wrapper/text.md b/docs/ja/api/wrapper/text.md index a26ee9366..b0bee35ce 100644 --- a/docs/ja/api/wrapper/text.md +++ b/docs/ja/api/wrapper/text.md @@ -1,4 +1,4 @@ -# text() +## text() `Wrapper` のテキスト内容を返します。 diff --git a/docs/ja/api/wrapper/trigger.md b/docs/ja/api/wrapper/trigger.md index bdc226f01..cb0c3c809 100644 --- a/docs/ja/api/wrapper/trigger.md +++ b/docs/ja/api/wrapper/trigger.md @@ -1,4 +1,4 @@ -# trigger(eventType [, options ]) +## trigger(eventType [, options ]) `Wrapper` DOM ノードのイベントを発火します。 diff --git a/docs/ja/guides/README.md b/docs/ja/guides/README.md index 3ead74183..35b33f99a 100644 --- a/docs/ja/guides/README.md +++ b/docs/ja/guides/README.md @@ -1,12 +1,12 @@ # ガイド -* [はじめる](./getting-started.md) -* [一般的なヒント](./common-tips.md) -* [キー、マウス、その他の DOM イベントのテスト](./dom-events.md) -* [テストランナを選ぶ](./choosing-a-test-runner.md) -* [Jest による単一ファイルコンポーネントのテスト](./testing-SFCs-with-jest.md) -* [Mocha + webpack による単一ファイルコンポーネントのテスト](./testing-SFCs-with-mocha-webpack.md) -* [Karma による単一ファイルコンポーネントのテスト](./testing-SFCs-with-karma.md) -* [非同期動作のテスト](./testing-async-components.md) -* [Vue Router と一緒に使う](./using-with-vue-router.md) -* [Vuex と一緒に使う](./using-with-vuex.md) +!!!include(docs/ja/guides/getting-started.md)!!! +!!!include(docs/ja/guides/common-tips.md)!!! +!!!include(docs/ja/guides/dom-events.md)!!! +!!!include(docs/ja/guides/choosing-a-test-runner.md)!!! +!!!include(docs/ja/guides/testing-SFCs-with-jest.md)!!! +!!!include(docs/ja/guides/testing-SFCs-with-mocha-webpack.md)!!! +!!!include(docs/ja/guides/testing-SFCs-with-karma.md)!!! +!!!include(docs/ja/guides/testing-async-components.md)!!! +!!!include(docs/ja/guides/using-with-vue-router.md)!!! +!!!include(docs/ja/guides/using-with-vuex.md)!!! \ No newline at end of file diff --git a/docs/ja/guides/choosing-a-test-runner.md b/docs/ja/guides/choosing-a-test-runner.md index 86b26c3ce..3c81e088d 100644 --- a/docs/ja/guides/choosing-a-test-runner.md +++ b/docs/ja/guides/choosing-a-test-runner.md @@ -1,4 +1,4 @@ -# テストランナを選ぶ +## テストランナを選ぶ テストランナは、テストを実行するプログラムです。 @@ -10,7 +10,7 @@ - [mocha-webpack](https://github.com/zinserjan/mocha-webpack) は webpack + Mocha のラッパですが、より合理的なインタフェースと watch モードを備えています。この設定のメリットは、webpack + `vue-loader` を使用して完全な SFC サポートを得ることができるということですが、より多くの設定を行う必要があります。 -## ブラウザ環境 +### ブラウザ環境 `vue-test-utils` はブラウザ環境に依存します。技術的には、実際のブラウザで実行することはできますが、異なるプラットフォーム上で実際のブラウザを起動するという複雑さのため、お勧めできません。代わりに、[JSDOM](https://github.com/tmpvar/jsdom) を使用して仮想ブラウザ環境で Node.js でテストを実行することをお勧めします。 @@ -25,7 +25,7 @@ npm install --save-dev jsdom jsdom-global require('jsdom-global')() ``` -## 単一ファイルコンポーネントをテストする +### 単一ファイルコンポーネントをテストする 単一ファイルコンポーネントは、ノードまたはブラウザで実行する前に事前コンパイルが必要です。コンパイルを実行するには、Jest プリプロセッサを使用する方法と webpack を直接使用する方法が推奨されます。 @@ -35,7 +35,7 @@ require('jsdom-global')() - [Jest による単一ファイルコンポーネントのテスト](./testing-SFCs-with-jest.md) - [Mocha + webpack による単一ファイルコンポーネントのテスト](./testing-SFCs-with-mocha-webpack.md) -## リソース +### リソース - [テストランナの性能比較](https://github.com/eddyerburgh/vue-unit-test-perf-comparison) - [Jest のプロジェクト例](https://github.com/vuejs/vue-test-utils-jest-example) diff --git a/docs/ja/guides/common-tips.md b/docs/ja/guides/common-tips.md index 7bec18021..09eb7c044 100644 --- a/docs/ja/guides/common-tips.md +++ b/docs/ja/guides/common-tips.md @@ -1,6 +1,6 @@ -# 一般的なヒント +## 一般的なヒント -## 何をテストするかを知る +### 何をテストするかを知る UI コンポーネントでは、コンポーネントの内部実装の詳細に集中しすぎて脆弱なテストが発生する可能性があるため、完全なラインベースのカバレッジを目指すことはお勧めしません。 @@ -12,7 +12,7 @@ UI コンポーネントでは、コンポーネントの内部実装の詳細 このトピックは、[Matt O'Connell による偉大なプレゼンテーション](http://slides.com/mattoconnell/deck#/)で詳細に説明されています。 -## Shallow 描画 +### Shallow 描画 単体テストでは、通常、単体テストとしてテスト対象のコンポーネントに焦点を当て、子コンポーネントの動作を間接的に検証することを避けたいと考えています。 @@ -27,7 +27,7 @@ const wrapper = shallowMount(Component) // Component インスタンスを含む wrapper.vm // マウントされた Vue インスタンス ``` -## イベントの発行を検証する +### イベントの発行を検証する マウントされた各ラッパは、基になる Vue インスタンスによって発行されたすべてのイベントを自動的に記録します。`wrapper.emitted()` を使って、記録されたイベントを取り出すことができます: @@ -58,7 +58,7 @@ expect(wrapper.emitted().foo[1]).toEqual([123]) また、[wrapper.emittedByOrder()](../api/wrapper/emittedByOrder.md) を呼び出すことで、発行順序のイベントの配列を取得することもできます。 -## コンポーネントの状態を操作する +### コンポーネントの状態を操作する ラッパの `setData` メソッドまたは `setProps` メソッドを使って、コンポーネントの状態を直接操作することができます。: @@ -68,7 +68,7 @@ wrapper.setData({ count: 10 }) wrapper.setProps({ foo: 'bar' }) ``` -## プロパティをモックする +### プロパティをモックする Vue に組み込まれた `propsData` オプションを使用してコンポーネントにプロパティを渡すことができます: @@ -86,7 +86,7 @@ mount(Component, { *オプションの完全なリストについては、ドキュメントの[マウントオプションのセクション](../api/options.md)を参照してください。* -## グローバルプラグインとミックスインの適用 +### グローバルプラグインとミックスインの適用 コンポーネントの中には、グローバルプラグインやミックスインによって注入された機能 (例: `vuex`、`vue-router` など)に依存するものもあります。 @@ -110,7 +110,7 @@ mount(Component, { **Vue Router のようなプラグインはグローバルの Vue コンストラクタに read-only なプロパティを追加します。 これは localVue コンストラクタにそのプラグインを再びインストールすることや read-only なプロパティに対するモックを追加することを不可能にします。** -## モックの注入 +### モックの注入 単純なモックを注入するための別の戦略として `mocks` オプションで行うことができます: @@ -131,7 +131,7 @@ mount(Component, { }) ``` -## ルーティングの扱い +### ルーティングの扱い 定義によるルーティングは、アプリケーションの全体的な構造と関連し、複数のコンポーネントが関係するため、統合テストまたはエンドツーエンドテストによってよくテストされます。 `vue-router` 機能に依存する個々のコンポーネントについては、上記の手法を使ってモックすることができます。 diff --git a/docs/ja/guides/dom-events.md b/docs/ja/guides/dom-events.md index 27b47465e..74f2ea2ce 100644 --- a/docs/ja/guides/dom-events.md +++ b/docs/ja/guides/dom-events.md @@ -1,6 +1,6 @@ -# キー、マウス、その他の DOM イベントのテスト +### キー、マウス、その他の DOM イベントのテスト -## イベントをトリガする +### イベントをトリガする `Wrapper` の `trigger` メソッドで DOM イベントをトリガすることができます。 @@ -18,7 +18,7 @@ const wrapper = mount(MyComponent) wrapper.find('button').trigger('click') ``` -## オプション +### オプション `trigger` メソッドはオプションで `options` オブジェクトを引数として取ります。`options` オブジェクトのプロパティはイベントオブジェクトのプロパティに追加されます。 @@ -31,7 +31,7 @@ wrapper.trigger('click', { button: 0 }) ``` -## マウスクリックの例 +### マウスクリックの例 **テスト対象のコンポーネント** @@ -85,7 +85,7 @@ describe('Click event', () => { }) ``` -## キーボードの例 +### キーボードの例 **テスト対象のコンポーネント** @@ -207,6 +207,6 @@ describe('Key event tests', () => { | pageup | 33 | | pagedown | 34 | -## 重要事項 +### 重要事項 `vue-test-utils` は同期的にイベントをトリガします。従って、 `Vue.nextTick()` を実行する必要はありません。 diff --git a/docs/ja/guides/getting-started.md b/docs/ja/guides/getting-started.md index 85563f737..b7c351820 100644 --- a/docs/ja/guides/getting-started.md +++ b/docs/ja/guides/getting-started.md @@ -1,6 +1,6 @@ -# はじめる +## はじめる -## セットアップ +#### セットアップ `vue-test-utils` の使い方を体験したい場合は、基本設定としてデモリポジトリをクローンし、依存関係をインストールしてください。 @@ -138,7 +138,7 @@ it('will catch the error using a promise', () => { }) ``` -## 次は何をするのか +### 次は何をするのか - [テストランナを選ぶ](./choosing-a-test-runner.md)で `vue-test-utils` をプロジェクトに組み込む - [テストを書くときの一般的なヒント](./common-tips.md)についてもっと知る diff --git a/docs/ja/guides/testing-SFCs-with-jest.md b/docs/ja/guides/testing-SFCs-with-jest.md index 48b6f6252..2beac939b 100644 --- a/docs/ja/guides/testing-SFCs-with-jest.md +++ b/docs/ja/guides/testing-SFCs-with-jest.md @@ -1,10 +1,10 @@ -# Jest を使用した単一ファイルコンポーネントのテスト +## Jest を使用した単一ファイルコンポーネントのテスト > このセットアップのサンプルプロジェクトは、 [GitHub](https://github.com/vuejs/vue-test-utils-jest-example) にあります。 Jest は Facebook が開発したテストランナであり、ユニットテストソリューションの提供を目指しています。 Jest の詳細については、[公式ドキュメント](https://facebook.github.io/jest/)を参照してください。 -## Jest のセットアップ +### Jest のセットアップ 既に、webpack、vue-loader、および Babel が正しく設定されている設定から始めると仮定します。例: `vue-cli` によって雛形生成された `webpack-simple` テンプレートです。 @@ -25,7 +25,7 @@ $ npm install --save-dev jest @vue/test-utils } ``` -## Jest における単一ファイルコンポーネントの処理 +### Jest における単一ファイルコンポーネントの処理 Jest に `*.vue` ファイルの処理方法を教えるために、`vue-jest` プリプロセッサをインストールして設定する必要があります。: @@ -55,7 +55,7 @@ npm install --save-dev vue-jest > **注意:** `vue-jest` は現在、カスタムブロックのサポートやスタイルのロードなど、`vue-loader` のすべての機能をサポートしていません。さらに、コード分割などのWebpack固有の機能はサポートされていません。サポートされていない機能を使用するには、 Jest の代わりに Mocha をテストランナーとして使用します。そして、 Webpack をコンポーネントをコンパイルするために使用します。やり方は [Mocha + webpackによる単一ファイルコンポーネントのテスト](./testing-SFCs-with-mocha-webpack.md)のガイドをお読みください。 -## Webpack エイリアスの処理 +### Webpack エイリアスの処理 webpack 設定で、`@` を `/src` のエイリアスにしたいといった場合、`moduleNameMapper`オプションを使って Jest の設定を追加する必要があります @@ -72,7 +72,7 @@ webpack 設定で、`@` を `/src` のエイリアスにしたいといった場 } ``` -## Jest のための Babel の設定 +### Jest のための Babel の設定 Node の最新バージョンではすでにほとんどの ES2015 機能がサポートされていますが、テストでは ES Modules 構文と stage-x 機能を使用することができます。そのために、`babel-jest` をインストールする必要があります。 @@ -122,7 +122,7 @@ webpack で `babel-preset-env` を使用するとした場合、webpack は ES M } ``` -## スナップショットテスト +### スナップショットテスト [`vue-server-renderer`](https://github.com/vuejs/vue/tree/dev/packages/vue-server-renderer) を使ってコンポーネントを文字列に描画して保存することができます。[Jest のスナップショットテスト](https://facebook.github.io/jest/docs/en/snapshot-testing.html) のスナップショットとして表示されます。 @@ -147,13 +147,13 @@ npm install --save-dev jest-serializer-vue } ``` -## テストファイルの配置 +### テストファイルの配置 デフォルトでは、Jest はプロジェクト全体で `.spec.js` または `.test.js` 拡張子を持つすべてのファイルを再帰的に取得します。これがあなたのニーズに合わない場合は、`package.json` ファイルの config セクションで[testRegex を変更する](https://facebook.github.io/jest/docs/en/configuration.html#testregex-string)ことが可能です。 Jestは、テスト対象のコードのすぐ隣に`__tests__`ディレクトリを作成することを推奨していますが、適切にテストを構造化することは自由です。 Jestがスナップショットテストを実行するテストファイルの隣に`__snapshots__`ディレクトリを作成することに注意してください。 -## カバレッジ +### カバレッジ Jest は複数のフォーマットでカバレッジを取ることができます。 以下はそれをするための簡単な例です。 @@ -186,7 +186,7 @@ Jest は複数のフォーマットでカバレッジを取ることができま より詳しい情報は [Jest configuration documentation](https://facebook.github.io/jest/docs/en/configuration.html#collectcoverage-boolean) にあります。 カバレッジの閾値やターゲットを出力するディレクトリなどのオプションが記載されています。 -## Spec の例 +### Spec の例 あなたが Jasmine をよく知っているなら、Jest の [assertion API](https://facebook.github.io/jest/docs/en/expect.html#content)は自宅のように感じるはずです。 @@ -202,7 +202,7 @@ describe('Component', () => { }) ``` -## リソース +### リソース - [このセットアップのプロジェクト例](https://github.com/vuejs/vue-test-utils-jest-example) - [Vue Conf 2017のスライド](https://github.com/codebryo/vue-testing-with-jest-conf17) diff --git a/docs/ja/guides/testing-SFCs-with-karma.md b/docs/ja/guides/testing-SFCs-with-karma.md index fe4f7bb9f..8f68f17b7 100644 --- a/docs/ja/guides/testing-SFCs-with-karma.md +++ b/docs/ja/guides/testing-SFCs-with-karma.md @@ -1,10 +1,10 @@ -# Karma による単一ファイルコンポーネントのテスト +## Karma による単一ファイルコンポーネントのテスト > このセットアップの例は [GitHub](https://github.com/eddyerburgh/vue-test-utils-karma-example) にあり、利用可能です。 Karma はブラウザを起動し、テストを実行しそれをレポートするテストランナーです。ここではテストを書くために Mocha を使用します。テストアサーションのために Chai を使用します。 -## Mocha をセットアップする +### Mocha をセットアップする セットアップを始めるにあたって `vue-cli` でスキャフォールドされた `webpack-simple` テンプレートのように Webpack 、vue-loader 、 Babel が既に設定されていることを想定しています。 diff --git a/docs/ja/guides/testing-SFCs-with-mocha-webpack.md b/docs/ja/guides/testing-SFCs-with-mocha-webpack.md index 148fb28ed..95a38e7b2 100644 --- a/docs/ja/guides/testing-SFCs-with-mocha-webpack.md +++ b/docs/ja/guides/testing-SFCs-with-mocha-webpack.md @@ -1,4 +1,4 @@ -# Mocha + webpack による単一ファイルコンポーネントのテスト +### Mocha + webpack による単一ファイルコンポーネントのテスト > このセットアップのサンプルプロジェクトは、 [GitHub](https://github.com/vuejs/vue-test-utils-mocha-webpack-example) にあります。 @@ -6,7 +6,7 @@ 技術的に好きなテストランナを使用して結びつけることができますが、この特定の作業に非常に合理的な経験を提供するために [`mocha-webpack`](https://github.com/zinserjan/mocha-webpack) を見つけました。 -## `mocha-webpack` の設定 +### `mocha-webpack` の設定 既に、webpack、vue-loader、および Babel が正しく設定されている設定から始めると仮定します。例: `vue-cli` によって雛形生成された `webpack-simple` テンプレートです。 diff --git a/docs/ja/guides/testing-async-components.md b/docs/ja/guides/testing-async-components.md index 560ef921b..fd4fa6b2a 100644 --- a/docs/ja/guides/testing-async-components.md +++ b/docs/ja/guides/testing-async-components.md @@ -1,4 +1,4 @@ -# 非同期動作のテスト +## 非同期動作のテスト テストをシンプルにするために、 `vue-test-utils` はDOMの更新を同期的に適用します。しかし、コールバックや Promise のようなコンポーネントの非同期動作をテストする場合、いくつかのテクニックを知っておく必要があります。 diff --git a/docs/ja/guides/using-with-vue-router.md b/docs/ja/guides/using-with-vue-router.md index 70a35844c..10b38a526 100644 --- a/docs/ja/guides/using-with-vue-router.md +++ b/docs/ja/guides/using-with-vue-router.md @@ -1,6 +1,6 @@ -# Vue Router と一緒に使用する +### Vue Router と一緒に使用する -## テストへ Vue Router のインストール +### テストへ Vue Router のインストール テストで Vue のコンストラクタベースの Vue Router をインストールしないでください。Vue Router をインストールすると Vue のプロトタイプの読み取り専用プロパティとして `$route` と `$router` が追加されます。 @@ -22,7 +22,7 @@ shallowMount(Component, { > Vue Router を localVue にインストールすると `$route` と `$router` が読み取り専用プロパティーとして localVue に追加されます。これは VueRouter をインストールした localVue を使用しているコンポーネントをマウントする時、 `mock` オプションで `$route` と `$router` を上書きすることができないことを意味します。 -## `router-link` または `router-view` を使用するコンポーネントテスト +### `router-link` または `router-view` を使用するコンポーネントテスト Vue Router をインストールする時、`router-link` と `router-view` コンポーネントが登録されます。これは、それらをアプリケーションにインポートする必要がなく、アプリケーションのどこでも使用することができます。 @@ -52,7 +52,7 @@ shallowMount(Component, { }) ``` -## `$route` と `$router` のモック +### `$route` と `$router` のモック 時々、コンポーネントが `$route` と `$router` オブジェクトから引数によって何かをするテストをしたいときがあります。これをするためには、Vue インスタンスにカスタムモックを渡すことができます。 @@ -72,7 +72,7 @@ const wrapper = shallowMount(Component, { wrapper.vm.$route.path // /some/path ``` -## よくある落とし穴 +### よくある落とし穴 Vue Router をインストールすると Vue のプロトタイプに読み取り専用プロパティとして `$route` と `$router` が追加されます。 diff --git a/docs/ja/guides/using-with-vuex.md b/docs/ja/guides/using-with-vuex.md index 6793a627a..53d684461 100644 --- a/docs/ja/guides/using-with-vuex.md +++ b/docs/ja/guides/using-with-vuex.md @@ -1,8 +1,7 @@ -# Vuex と一緒に使用する +### Vuex と一緒に使用する このガイドでは、`vue-test-utils` でコンポーネントで Vuex をテストする方法について、見ていきます。 -## コンポーネント内の Vuex のテスト ### アクションのモック @@ -262,7 +261,7 @@ describe('Modules.vue', () => { ``` -## Vuex ストアのテスト +### Vuex ストアのテスト Vuex ストアをテストする方法が2つあります。1つ目はゲッタとミューテーションとアクションを別々に単体テストする方法です。2つ目はストアを生成してそれをテストする方法です。 @@ -383,7 +382,7 @@ test('updates evenOrOdd getter when increment is commited', () => { ストアをストアの設定から生成する前に `cloneDeep` を使用しています。こうする理由は Vuex はストアを生成するためにオプションオブジェクトを変更するからです。どのテストでも確実に汚染されていないストアを使うために `storeConfig` オブジェクトを複製する必要があります。 -## リソース +### リソース - [コンポーネントをテストする例](https://github.com/eddyerburgh/vue-test-utils-vuex-example) - [ストアをテストする例](https://github.com/eddyerburgh/testing-vuex-store-example) From 0d09a6d89daaad9f73f84a3c37d950a8a1478dc2 Mon Sep 17 00:00:00 2001 From: eddyerburgh Date: Sat, 19 May 2018 21:27:08 +0100 Subject: [PATCH 3/9] docs: add zh docs --- docs/.vuepress/config.js | 21 ++++++- docs/ja/api/script.sh | 12 ---- docs/ja/api/wrapper/attributes.md | 2 +- docs/zh-cn/api/README.md | 62 ------------------- docs/zh-cn/api/components/README.md | 5 -- docs/zh-cn/api/wrapper-array/README.md | 12 ---- docs/zh-cn/api/wrapper-array/hasAttribute.md | 20 ------ docs/zh-cn/api/wrapper-array/hasClass.md | 19 ------ docs/zh-cn/api/wrapper-array/hasProp.md | 23 ------- docs/zh-cn/api/wrapper/README.md | 16 ----- docs/zh-cn/api/wrapper/hasAttribute.md | 36 ----------- docs/zh-cn/api/wrapper/hasClass.md | 20 ------ docs/zh-cn/guides/README.md | 12 ---- docs/{zh-cn => zh}/README.md | 2 - docs/{zh-cn => zh}/SUMMARY.md | 0 docs/zh/api/README.md | 9 +++ docs/zh/api/components/README.md | 7 +++ .../api/components/RouterLinkStub.md | 2 +- .../api/components/TransitionGroupStub.md | 2 +- .../api/components/TransitionStub.md | 2 +- docs/{zh-cn => zh}/api/config.md | 4 +- docs/{zh-cn => zh}/api/createLocalVue.md | 2 +- docs/{zh-cn => zh}/api/mount.md | 2 +- docs/{zh-cn => zh}/api/options.md | 26 ++++---- docs/{zh-cn => zh}/api/render.md | 2 +- docs/{zh-cn => zh}/api/renderToString.md | 2 +- docs/{zh-cn => zh}/api/selectors.md | 12 ++-- .../api/shallow.md => zh/api/shallowMount.md} | 22 +++---- docs/zh/api/wrapper-array/README.md | 27 ++++++++ docs/{zh-cn => zh}/api/wrapper-array/at.md | 2 +- .../api/wrapper-array/contains.md | 2 +- .../api/wrapper-array/destroy.md | 2 +- .../{zh-cn => zh}/api/wrapper-array/filter.md | 2 +- docs/{zh-cn => zh}/api/wrapper-array/is.md | 2 +- .../api/wrapper-array/isEmpty.md | 2 +- .../api/wrapper-array/isVisible.md | 2 +- .../api/wrapper-array/isVueInstance.md | 2 +- .../api/wrapper-array/setData.md | 2 +- .../api/wrapper-array/setMethods.md | 2 +- .../api/wrapper-array/setProps.md | 2 +- .../api/wrapper-array/trigger.md | 2 +- docs/zh/api/wrapper/README.md | 49 +++++++++++++++ docs/{zh-cn => zh}/api/wrapper/attributes.md | 2 +- docs/{zh-cn => zh}/api/wrapper/classes.md | 2 +- docs/{zh-cn => zh}/api/wrapper/contains.md | 2 +- docs/{zh-cn => zh}/api/wrapper/destroy.md | 2 +- docs/{zh-cn => zh}/api/wrapper/emitted.md | 6 +- .../api/wrapper/emittedByOrder.md | 4 +- docs/{zh-cn => zh}/api/wrapper/exists.md | 2 +- docs/{zh-cn => zh}/api/wrapper/find.md | 2 +- docs/{zh-cn => zh}/api/wrapper/findAll.md | 2 +- docs/{zh-cn => zh}/api/wrapper/html.md | 2 +- docs/{zh-cn => zh}/api/wrapper/is.md | 2 +- docs/{zh-cn => zh}/api/wrapper/isEmpty.md | 2 +- docs/{zh-cn => zh}/api/wrapper/isVisible.md | 2 +- .../api/wrapper/isVueInstance.md | 2 +- docs/{zh-cn => zh}/api/wrapper/name.md | 2 +- docs/{zh-cn => zh}/api/wrapper/props.md | 2 +- docs/{zh-cn => zh}/api/wrapper/setData.md | 2 +- docs/{zh-cn => zh}/api/wrapper/setMethods.md | 2 +- docs/{zh-cn => zh}/api/wrapper/setProps.md | 2 +- docs/{zh-cn => zh}/api/wrapper/text.md | 2 +- docs/{zh-cn => zh}/api/wrapper/trigger.md | 2 +- docs/zh/guides/README.md | 12 ++++ .../guides/choosing-a-test-runner.md | 8 +-- docs/{zh-cn => zh}/guides/common-tips.md | 20 +++--- docs/{zh-cn => zh}/guides/dom-events.md | 12 ++-- docs/{zh-cn => zh}/guides/getting-started.md | 6 +- .../guides/testing-SFCs-with-jest.md | 20 +++--- .../guides/testing-SFCs-with-karma.md | 4 +- .../guides/testing-SFCs-with-mocha-webpack.md | 4 +- .../guides/testing-async-components.md | 2 +- .../guides/using-with-vue-router.md | 10 +-- docs/{zh-cn => zh}/guides/using-with-vuex.md | 10 ++- 74 files changed, 245 insertions(+), 367 deletions(-) delete mode 100755 docs/ja/api/script.sh delete mode 100644 docs/zh-cn/api/README.md delete mode 100644 docs/zh-cn/api/components/README.md delete mode 100644 docs/zh-cn/api/wrapper-array/README.md delete mode 100644 docs/zh-cn/api/wrapper-array/hasAttribute.md delete mode 100644 docs/zh-cn/api/wrapper-array/hasClass.md delete mode 100644 docs/zh-cn/api/wrapper-array/hasProp.md delete mode 100644 docs/zh-cn/api/wrapper/README.md delete mode 100644 docs/zh-cn/api/wrapper/hasAttribute.md delete mode 100644 docs/zh-cn/api/wrapper/hasClass.md delete mode 100644 docs/zh-cn/guides/README.md rename docs/{zh-cn => zh}/README.md (99%) rename docs/{zh-cn => zh}/SUMMARY.md (100%) create mode 100644 docs/zh/api/README.md create mode 100644 docs/zh/api/components/README.md rename docs/{zh-cn => zh}/api/components/RouterLinkStub.md (95%) rename docs/{zh-cn => zh}/api/components/TransitionGroupStub.md (97%) rename docs/{zh-cn => zh}/api/components/TransitionStub.md (97%) rename docs/{zh-cn => zh}/api/config.md (97%) rename docs/{zh-cn => zh}/api/createLocalVue.md (96%) rename docs/{zh-cn => zh}/api/mount.md (98%) rename docs/{zh-cn => zh}/api/options.md (95%) rename docs/{zh-cn => zh}/api/render.md (98%) rename docs/{zh-cn => zh}/api/renderToString.md (98%) rename docs/{zh-cn => zh}/api/selectors.md (93%) rename docs/{zh-cn/api/shallow.md => zh/api/shallowMount.md} (81%) create mode 100644 docs/zh/api/wrapper-array/README.md rename docs/{zh-cn => zh}/api/wrapper-array/at.md (96%) rename docs/{zh-cn => zh}/api/wrapper-array/contains.md (95%) rename docs/{zh-cn => zh}/api/wrapper-array/destroy.md (95%) rename docs/{zh-cn => zh}/api/wrapper-array/filter.md (96%) rename docs/{zh-cn => zh}/api/wrapper-array/is.md (95%) rename docs/{zh-cn => zh}/api/wrapper-array/isEmpty.md (95%) rename docs/{zh-cn => zh}/api/wrapper-array/isVisible.md (97%) rename docs/{zh-cn => zh}/api/wrapper-array/isVueInstance.md (94%) rename docs/{zh-cn => zh}/api/wrapper-array/setData.md (96%) rename docs/{zh-cn => zh}/api/wrapper-array/setMethods.md (95%) rename docs/{zh-cn => zh}/api/wrapper-array/setProps.md (95%) rename docs/{zh-cn => zh}/api/wrapper-array/trigger.md (93%) create mode 100644 docs/zh/api/wrapper/README.md rename docs/{zh-cn => zh}/api/wrapper/attributes.md (93%) rename docs/{zh-cn => zh}/api/wrapper/classes.md (95%) rename docs/{zh-cn => zh}/api/wrapper/contains.md (95%) rename docs/{zh-cn => zh}/api/wrapper/destroy.md (94%) rename docs/{zh-cn => zh}/api/wrapper/emitted.md (82%) rename docs/{zh-cn => zh}/api/wrapper/emittedByOrder.md (87%) rename docs/{zh-cn => zh}/api/wrapper/exists.md (97%) rename docs/{zh-cn => zh}/api/wrapper/find.md (97%) rename docs/{zh-cn => zh}/api/wrapper/findAll.md (96%) rename docs/{zh-cn => zh}/api/wrapper/html.md (95%) rename docs/{zh-cn => zh}/api/wrapper/is.md (94%) rename docs/{zh-cn => zh}/api/wrapper/isEmpty.md (94%) rename docs/{zh-cn => zh}/api/wrapper/isVisible.md (96%) rename docs/{zh-cn => zh}/api/wrapper/isVueInstance.md (92%) rename docs/{zh-cn => zh}/api/wrapper/name.md (96%) rename docs/{zh-cn => zh}/api/wrapper/props.md (96%) rename docs/{zh-cn => zh}/api/wrapper/setData.md (94%) rename docs/{zh-cn => zh}/api/wrapper/setMethods.md (95%) rename docs/{zh-cn => zh}/api/wrapper/setProps.md (97%) rename docs/{zh-cn => zh}/api/wrapper/text.md (95%) rename docs/{zh-cn => zh}/api/wrapper/trigger.md (96%) create mode 100644 docs/zh/guides/README.md rename docs/{zh-cn => zh}/guides/choosing-a-test-runner.md (96%) rename docs/{zh-cn => zh}/guides/common-tips.md (95%) rename docs/{zh-cn => zh}/guides/dom-events.md (96%) rename docs/{zh-cn => zh}/guides/getting-started.md (99%) rename docs/{zh-cn => zh}/guides/testing-SFCs-with-jest.md (96%) rename docs/{zh-cn => zh}/guides/testing-SFCs-with-karma.md (98%) rename docs/{zh-cn => zh}/guides/testing-SFCs-with-mocha-webpack.md (98%) rename docs/{zh-cn => zh}/guides/testing-async-components.md (99%) rename docs/{zh-cn => zh}/guides/using-with-vue-router.md (92%) rename docs/{zh-cn => zh}/guides/using-with-vuex.md (99%) diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 2a3c91e31..2bfaa5445 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -49,7 +49,26 @@ module.exports = { '/zh/': { label: '简体中文', selectText: '选择语言', - editLinkText: '在 GitHub 上编辑此页' + editLinkText: '在 GitHub 上编辑此页', + nav: [ + { + text: 'API', + link: '/zh/api/' + }, + { + text: '教程', + link: '/zh/guides/' + } + ], + sidebar: [ + '/zh/', + '/zh/guides/', + '/zh/api/', + '/zh/api/wrapper/', + '/zh/api/wrapper-array/', + '/zh/api/options', + '/zh/api/components/' + ] }, '/ja/': { label: '日本語', diff --git a/docs/ja/api/script.sh b/docs/ja/api/script.sh deleted file mode 100755 index 453be596e..000000000 --- a/docs/ja/api/script.sh +++ /dev/null @@ -1,12 +0,0 @@ -# FILES=./wrapper-array/* -# for f in $FILES -# do - -# # sed -i -e 's/# `/## /g' $f && sed -i -e 's/)`/)/g' $f -# # rm "$f" -# done - -for file in ./wrapper/*.md-e -do - rm $file -done \ No newline at end of file diff --git a/docs/ja/api/wrapper/attributes.md b/docs/ja/api/wrapper/attributes.md index dcf16eff4..9a9642214 100644 --- a/docs/ja/api/wrapper/attributes.md +++ b/docs/ja/api/wrapper/attributes.md @@ -1,4 +1,4 @@ -### attributes() +## attributes() `Wrapper` にラップされている要素の属性をオブジェクトで返します。 diff --git a/docs/zh-cn/api/README.md b/docs/zh-cn/api/README.md deleted file mode 100644 index a397c7713..000000000 --- a/docs/zh-cn/api/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# API - -* [mount](./mount.md) -* [shallow](./shallow.md) -* [render](./render.md) -* [renderToString](./renderToString.md) -* [挂载选项](./options.md) - - [context](./options.md#context) - - [slots](./options.md#slots) - - [scopedSlots](api/options.md#scopedslots) - - [stubs](./options.md#stubs) - - [mocks](./options.md#mocks) - - [localVue](./options.md#localvue) - - [attachToDocument](./options.md#attachtodocument) - - [attrs](./options.md#attrs) - - [listeners](./options.md#listeners) - - [provide](./options.md#provide) - - [sync](./options.md#sync) - - [其它选项](./options.md#other-options) -* [Wrapper](./wrapper/README.md) - * [attributes](./wrapper/attributes.md) - * [classes](./wrapper/classes.md) - * [contains](./wrapper/contains.md) - * [emitted](./wrapper/emitted.md) - * [emittedByOrder](./wrapper/emittedByOrder.md) - * [exists](./wrapper/exists.md) - * [destroy](./wrapper/destroy.md) - * [find](./wrapper/find.md) - * [findAll](./wrapper/findAll.md) - * [html](./wrapper/html.md) - * [is](./wrapper/is.md) - * [isEmpty](./wrapper/isEmpty.md) - * [isVueInstance](./wrapper/isVueInstance.md) - * [name](./wrapper/name.md) - * [props](./wrapper/props.md) - * [setData](./wrapper/setData.md) - * [setMethods](./wrapper/setMethods.md) - * [setProps](./wrapper/setProps.md) - * [text](./wrapper/text.md) - * [trigger](./wrapper/trigger.md) - * [isVisible](./wrapper/isVisible.md) -* [WrapperArray](./wrapper-array/README.md) - * [at](./wrapper-array/at.md) - * [contains](./wrapper-array/contains.md) - * [exists](./wrapper/exists.md) - * [destroy](./wrapper-array/destroy.md) - * [filter](./wrapper-array/filter.md) - * [is](./wrapper-array/is.md) - * [isEmpty](./wrapper-array/isEmpty.md) - * [isVueInstance](./wrapper-array/isVueInstance.md) - * [setData](./wrapper-array/setData.md) - * [setMethods](./wrapper-array/setMethods.md) - * [setProps](./wrapper-array/setProps.md) - * [trigger](./wrapper-array/trigger.md) - * [isVisible](./wrapper-array/isVisible.md) -* [组件](./components/README.md) - * [TransitionStub](./components/TransitionStub.md) - * [TransitionGroupStub](./components/TransitionGroupStub.md) - * [RouterLinkStub](./components/RouterLinkStub.md) -* [选择器](./selectors.md) -* [createLocalVue](./createLocalVue.md) -* [配置](./config.md) diff --git a/docs/zh-cn/api/components/README.md b/docs/zh-cn/api/components/README.md deleted file mode 100644 index a145d137b..000000000 --- a/docs/zh-cn/api/components/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# 组件 - -Vue Test Utils 包含了用做存根的实用组件。 - -默认情况下 [TransitionStub](./TransitionStub.md) 和 [TransitionGroupStub](./TransitionGroupStub.md) 用来存根 `transition` 和 `transition-group` 组件。你也可以通过配置信息来编辑存根。 diff --git a/docs/zh-cn/api/wrapper-array/README.md b/docs/zh-cn/api/wrapper-array/README.md deleted file mode 100644 index 6e3242830..000000000 --- a/docs/zh-cn/api/wrapper-array/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# `WrapperArray` - -一个 `WrapperArray` 是一个包含 [`Wrapper`](../wrapper/README.md) 数组以及 `Wrapper` 的测试方法等对象。 - -- **属性:** - -`wrappers` `array`: 包含在 `WrapperArray` 内的 `Wrappers` -`length` `number`:该 `WrapperArray` 中包含的 `Wrapper` 的数量。 - - - **方法:** - -在文档的 `WrapperArray` 章节有详细的方法列表。 diff --git a/docs/zh-cn/api/wrapper-array/hasAttribute.md b/docs/zh-cn/api/wrapper-array/hasAttribute.md deleted file mode 100644 index 9c0b6ca32..000000000 --- a/docs/zh-cn/api/wrapper-array/hasAttribute.md +++ /dev/null @@ -1,20 +0,0 @@ -# `hasAttribute(attribute, value)` - -断言 `WrapperArray` 中的每个 `Wrapper` 的 DOM 节点都有 `attribute` 特性的值匹配 `value`。 - -- **参数:** - - `{string} attribute` - - `{string} value` - -- **返回值:**`{boolean}` - -- **示例:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.hasAttribute('id', 'foo')).toBe(true) -``` diff --git a/docs/zh-cn/api/wrapper-array/hasClass.md b/docs/zh-cn/api/wrapper-array/hasClass.md deleted file mode 100644 index ce0256a05..000000000 --- a/docs/zh-cn/api/wrapper-array/hasClass.md +++ /dev/null @@ -1,19 +0,0 @@ -# `hasClass(className)` - -断言每个 `WrapperArray` 中的 `Wrapper` 的 DOM 节点都包含名为 `className` 的 class。 - -- **参数:** - - `{string} className` - -- **返回值:**`{boolean}` - -- **示例:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -const divArray = wrapper.findAll('div') -expect(divArray.hasClass('bar')).toBe(true) -``` diff --git a/docs/zh-cn/api/wrapper-array/hasProp.md b/docs/zh-cn/api/wrapper-array/hasProp.md deleted file mode 100644 index 47445a8b3..000000000 --- a/docs/zh-cn/api/wrapper-array/hasProp.md +++ /dev/null @@ -1,23 +0,0 @@ -# `hasProp(prop, value)` - -断言 `WrapperArray` 中的每个 `Wrapper` `vm` 都有 `prop` 属性值匹配 `value`。 - -**注意:该包裹器必须包含一个 Vue 示例。** - -- **参数:** - - `{string} prop` - - `{any} value` - -- **返回值:**`{boolean}` - -- **示例:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' -import Bar from './Bar.vue' - -const wrapper = mount(Foo) -const barArray = wrapper.findAll(Bar) -expect(barArray.hasProp('bar', 10)).toBe(true) -``` diff --git a/docs/zh-cn/api/wrapper/README.md b/docs/zh-cn/api/wrapper/README.md deleted file mode 100644 index 1c57fc7fa..000000000 --- a/docs/zh-cn/api/wrapper/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# `Wrapper` - -Vue Test Utils 是一个基于包裹器的 API。 - -一个 `Wrapper` 是一个包括了一个挂载组件或 vnode,以及测试该组件或 vnode 的方法。 - -- **属性:** - -`vm` `Component`:这是该 Vue 实例。你可以通过 `wrapper.vm` 访问一个实例所有的[方法和属性](https://vuejs.org/v2/api/#Instance-Properties)。这只存在于 Vue 组件包裹器中 -`element` `HTMLElement`:包裹器的根 DOM 节点 -`options` `Object`:一个对象,包含传递给 `mount` 或 `shallow` 的 Vue Test Utils 选项 -`options.attachedToDom` `Boolean`:如果 `attachToDom` 传递给了 `mount` 或 `shallow` 则为真 - -- **方法:** - -在文档的 `Wrapper` 章节有详细的方法列表。 diff --git a/docs/zh-cn/api/wrapper/hasAttribute.md b/docs/zh-cn/api/wrapper/hasAttribute.md deleted file mode 100644 index 5891bd9fb..000000000 --- a/docs/zh-cn/api/wrapper/hasAttribute.md +++ /dev/null @@ -1,36 +0,0 @@ -# `hasAttribute(attribute, value)` - -断言 `Wrapper` DOM 节点有匹配的特性值。 - -如果 `Wrapper` DOM 节点包含有值匹配的特性则返回 `true`。 - -- **参数:** - - `{string} attribute` - - `{string} value` - -- **返回值:**`{boolean}` - -- **示例:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.hasAttribute('id', 'foo')).toBe(true) -``` - -- **替代方案:** - -你可以从 `Wrapper.element` 获取特性并对其值做断言: - -```js -import { mount } from '@vue/test-utils' -import { expect } from 'chai' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.element.getAttribute('id')).toBe('foo') -``` - -这使得断言的错误诊断信息更丰富。 diff --git a/docs/zh-cn/api/wrapper/hasClass.md b/docs/zh-cn/api/wrapper/hasClass.md deleted file mode 100644 index 3dc8ad670..000000000 --- a/docs/zh-cn/api/wrapper/hasClass.md +++ /dev/null @@ -1,20 +0,0 @@ -# `hasClass(className)` - -断言 `Wrapper` DOM 节点包含一个 class 名。 - -如果 `Wrapper` DOM 节点包含名为 `className` 的 class 则返回 `true`。 - -- **参数:** - - `{string} className` - -- **返回值:**`{boolean}` - -- **示例:** - -```js -import { mount } from '@vue/test-utils' -import Foo from './Foo.vue' - -const wrapper = mount(Foo) -expect(wrapper.hasClass('bar')).toBe(true) -``` diff --git a/docs/zh-cn/guides/README.md b/docs/zh-cn/guides/README.md deleted file mode 100644 index 27f2478fa..000000000 --- a/docs/zh-cn/guides/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# 教程 - -* [起步](./getting-started.md) -* [常用技巧](./common-tips.md) -* [鼠标、键盘以及其它 DOM 事件](./dom-events.md) -* [选择一个测试运行器](./choosing-a-test-runner.md) -* [用 Jest 测试单文件组件](./testing-SFCs-with-jest.md) -* [用 Mocha 和 webpack 测试单文件组件](./testing-SFCs-with-mocha-webpack.md) -* [用 Karma 测试单文件组件](./testing-SFCs-with-karma.md) -* [测试异步行为](./testing-async-components.md) -* [配合 Vue Router 使用](./using-with-vue-router.md) -* [配合 Vuex 实用](./using-with-vuex.md) diff --git a/docs/zh-cn/README.md b/docs/zh/README.md similarity index 99% rename from docs/zh-cn/README.md rename to docs/zh/README.md index 313fa82aa..634e31781 100644 --- a/docs/zh-cn/README.md +++ b/docs/zh/README.md @@ -2,8 +2,6 @@ Vue Test Utils 是 Vue.js 官方的单元测试实用工具库。 -## 目录 - * [教程](guides/README.md) * [起步](guides/getting-started.md) * [常用技巧](guides/common-tips.md) diff --git a/docs/zh-cn/SUMMARY.md b/docs/zh/SUMMARY.md similarity index 100% rename from docs/zh-cn/SUMMARY.md rename to docs/zh/SUMMARY.md diff --git a/docs/zh/api/README.md b/docs/zh/api/README.md new file mode 100644 index 000000000..55017c3e6 --- /dev/null +++ b/docs/zh/api/README.md @@ -0,0 +1,9 @@ +# API + +!!!include(docs/zh/api/mount.md)!!! +!!!include(docs/zh/api/shallowMount.md)!!! +!!!include(docs/zh/api/render.md)!!! +!!!include(docs/zh/api/renderToString.md)!!! +!!!include(docs/zh/api/selectors.md)!!! +!!!include(docs/zh/api/createLocalVue.md)!!! +!!!include(docs/zh/api/config.md)!!! \ No newline at end of file diff --git a/docs/zh/api/components/README.md b/docs/zh/api/components/README.md new file mode 100644 index 000000000..15197faba --- /dev/null +++ b/docs/zh/api/components/README.md @@ -0,0 +1,7 @@ +# 组件 + +Vue Test Utils 包含了用做存根的实用组件。 + +!!!include(docs/zh/api/components/RouterLinkStub.md)!!! +!!!include(docs/zh/api/components/TransitionStub.md)!!! +!!!include(docs/zh/api/components/TransitionGroupStub.md)!!! \ No newline at end of file diff --git a/docs/zh-cn/api/components/RouterLinkStub.md b/docs/zh/api/components/RouterLinkStub.md similarity index 95% rename from docs/zh-cn/api/components/RouterLinkStub.md rename to docs/zh/api/components/RouterLinkStub.md index b305a76a4..61ddf513a 100644 --- a/docs/zh-cn/api/components/RouterLinkStub.md +++ b/docs/zh/api/components/RouterLinkStub.md @@ -1,4 +1,4 @@ -# `RouterLinkStub` +## RouterLinkStub 一个用来存根 Vue Router 中 `router-link` 组件的组件。 diff --git a/docs/zh-cn/api/components/TransitionGroupStub.md b/docs/zh/api/components/TransitionGroupStub.md similarity index 97% rename from docs/zh-cn/api/components/TransitionGroupStub.md rename to docs/zh/api/components/TransitionGroupStub.md index d7b02645b..9df09ddb9 100644 --- a/docs/zh-cn/api/components/TransitionGroupStub.md +++ b/docs/zh/api/components/TransitionGroupStub.md @@ -1,4 +1,4 @@ -# `TransitionGroupStub` +## TransitionGroupStub 一个用来存根 `transition-group` 组件的组件。与其异步完成过渡动画不同的是,它会同步返回子组件。 diff --git a/docs/zh-cn/api/components/TransitionStub.md b/docs/zh/api/components/TransitionStub.md similarity index 97% rename from docs/zh-cn/api/components/TransitionStub.md rename to docs/zh/api/components/TransitionStub.md index 298e659fb..13efaaaaf 100644 --- a/docs/zh-cn/api/components/TransitionStub.md +++ b/docs/zh/api/components/TransitionStub.md @@ -1,4 +1,4 @@ -# `TransitionStub` +## TransitionStub 一个用来存根 `transition` 组件的组件。与其异步完成过渡动画不同的是,它会同步返回子组件。 diff --git a/docs/zh-cn/api/config.md b/docs/zh/api/config.md similarity index 97% rename from docs/zh-cn/api/config.md rename to docs/zh/api/config.md index b27ce54e3..478885640 100644 --- a/docs/zh-cn/api/config.md +++ b/docs/zh/api/config.md @@ -1,9 +1,7 @@ -# 配置 +## 配置 Vue Test Utils 包含了一个定义其选项的配置对象。 -## Vue Test Utils 配置选项 - ### `stubs` - 类型:`Object` diff --git a/docs/zh-cn/api/createLocalVue.md b/docs/zh/api/createLocalVue.md similarity index 96% rename from docs/zh-cn/api/createLocalVue.md rename to docs/zh/api/createLocalVue.md index a005d2cb1..489ca92da 100644 --- a/docs/zh-cn/api/createLocalVue.md +++ b/docs/zh/api/createLocalVue.md @@ -1,4 +1,4 @@ -# `createLocalVue()` +## createLocalVue() - **返回值:** - `{Component}` diff --git a/docs/zh-cn/api/mount.md b/docs/zh/api/mount.md similarity index 98% rename from docs/zh-cn/api/mount.md rename to docs/zh/api/mount.md index 99d7b2eb4..946bda67e 100644 --- a/docs/zh-cn/api/mount.md +++ b/docs/zh/api/mount.md @@ -1,4 +1,4 @@ -# `mount(component [, options])` +## mount() - **参数:** diff --git a/docs/zh-cn/api/options.md b/docs/zh/api/options.md similarity index 95% rename from docs/zh-cn/api/options.md rename to docs/zh/api/options.md index 0f597f949..2850f2bbf 100644 --- a/docs/zh-cn/api/options.md +++ b/docs/zh/api/options.md @@ -2,8 +2,6 @@ 即 `mount` 和 `shallow` 的选项。该对象同时包含了 Vue Test Utils 挂载选项和其它选项。 -## Vue Test Utils 特定的挂载选项 - - [`context`](#context) - [`slots`](#slots) - [`scopedSlots`](#scopedslots) @@ -16,7 +14,7 @@ - [`provide`](#provide) - [`sync`](#sync) -### `context` +## context - 类型:`Object` @@ -38,7 +36,7 @@ const wrapper = mount(Component, { expect(wrapper.is(Component)).toBe(true) ``` -### `slots` +## slots - 类型:`{ [name: string]: Array|Component|string }` @@ -61,7 +59,7 @@ const wrapper = shallow(Component, { expect(wrapper.find('div')).toBe(true) ``` -#### 传递文本 +### 传递文本 你可以传递文本到 `slots`。 这里有一处限制。 @@ -69,7 +67,7 @@ expect(wrapper.find('div')).toBe(true) 我们不支持 PhantomJS。 你可以使用 [Puppeteer](https://github.com/karma-runner/karma-chrome-launcher#headless-chromium-with-puppeteer) 作为替代品。 -### `scopedSlots` +## scopedSlots - 类型:`{ [name: string]: string }` @@ -96,7 +94,7 @@ const wrapper = shallow(Component, { expect(wrapper.find('#fooWrapper').html()).toBe('

0,text1

1,text2

2,text3

') ``` -### `stubs` +## stubs - 类型:`{ [name: string]: Component | boolean } | Array` @@ -121,7 +119,7 @@ shallow(Component, { }) ``` -### `mocks` +## mocks - 类型:`Object` @@ -139,7 +137,7 @@ const wrapper = shallow(Component, { expect(wrapper.vm.$route.path).toBe($route.path) ``` -### `localVue` +## localVue - 类型:`Vue` @@ -170,32 +168,32 @@ const wrapper = mount(Component, { expect(wrapper.vm.$route).toBeInstanceOf(Object) ``` -### `attachToDocument` +## attachToDocument - 类型:`boolean` - 默认值:`false` 当设为 `true` 时,组件在渲染时将会挂载到 DOM 上。 -### `attrs` +## attrs - 类型:`Object` 设置组件实例的 `$attrs` 对象。 -### `listeners` +## listeners - 类型:`Object` 设置组件实例的 `$listeners` 对象。 -### `provide` +## provide - 类型:`Object` 为组件传递用于注入的属性。可查阅 [provie/inject](https://cn.vuejs.org/v2/api/#provide-inject) 了解更多。 -### `sync` +## sync - 类型:`boolean` - 默认值:`true` diff --git a/docs/zh-cn/api/render.md b/docs/zh/api/render.md similarity index 98% rename from docs/zh-cn/api/render.md rename to docs/zh/api/render.md index 58c664b71..4eb69a54f 100644 --- a/docs/zh-cn/api/render.md +++ b/docs/zh/api/render.md @@ -1,4 +1,4 @@ -# `render(component {, options}])` +## render() - **参数:** diff --git a/docs/zh-cn/api/renderToString.md b/docs/zh/api/renderToString.md similarity index 98% rename from docs/zh-cn/api/renderToString.md rename to docs/zh/api/renderToString.md index f7c407a50..91ec2896b 100644 --- a/docs/zh-cn/api/renderToString.md +++ b/docs/zh/api/renderToString.md @@ -1,4 +1,4 @@ -# `renderToString(component {, options}])` +## renderToString() - **参数:** diff --git a/docs/zh-cn/api/selectors.md b/docs/zh/api/selectors.md similarity index 93% rename from docs/zh-cn/api/selectors.md rename to docs/zh/api/selectors.md index 1ebeac3bd..087105349 100644 --- a/docs/zh-cn/api/selectors.md +++ b/docs/zh/api/selectors.md @@ -1,8 +1,8 @@ -# 选择器 +## 选择器 很多方法的参数中都包含选择器。一个选择器可以是一个 CSS 选择器、一个 Vue 组件或是一个查找选项对象。 -## CSS 选择器 +### CSS 选择器 挂载处理任何有效的 CSS 选择器: @@ -19,7 +19,7 @@ - 近邻兄弟选择器 (`div + .foo`) - 一般兄弟选择器 (`div ~ .foo`) -## Vue 组件 +### Vue 组件 Vue 组件也是有效的选择器。 @@ -39,9 +39,9 @@ const wrapper = shallow(Foo) expect(wrapper.is(Foo)).toBe(true) ``` -## 查找选项对象 +### 查找选项对象 -### Name +#### Name Vue Test Utils 允许通过一个查找选项对象在组件包裹器上根据一个组件的 `name` 选择元素。 @@ -51,7 +51,7 @@ const buttonWrapper = wrapper.find({ name: 'my-button' }) buttonWrapper.trigger('click') ``` -### Ref +#### Ref Vue Test Utils 允许通过一个查找选项对象在组件包裹器上根据 `$ref` 选择元素。 diff --git a/docs/zh-cn/api/shallow.md b/docs/zh/api/shallowMount.md similarity index 81% rename from docs/zh-cn/api/shallow.md rename to docs/zh/api/shallowMount.md index d21253cef..3792a2d8f 100644 --- a/docs/zh-cn/api/shallow.md +++ b/docs/zh/api/shallowMount.md @@ -1,4 +1,4 @@ -# `shallow(component {, options}])` +## shallowMount() - **参数:** @@ -27,12 +27,12 @@ **无选项:** ```js -import { shallow } from '@vue/test-utils' +import { shallowMount } from '@vue/test-utils' import Foo from './Foo.vue' describe('Foo', () => { it('返回一个 div', () => { - const wrapper = shallow(Foo) + const wrapper = shallowMount(Foo) expect(wrapper.contains('div')).toBe(true) }) }) @@ -41,12 +41,12 @@ describe('Foo', () => { **使用 Vue 选项:** ```js -import { shallow } from '@vue/test-utils' +import { shallowMount } from '@vue/test-utils' import Foo from './Foo.vue' describe('Foo', () => { it('渲染一个 div', () => { - const wrapper = shallow(Foo, { + const wrapper = shallowMount(Foo, { propsData: { color: 'red' } @@ -59,12 +59,12 @@ describe('Foo', () => { **固定在 DOM 上:** ```js -import { shallow } from '@vue/test-utils' +import { shallowMount } from '@vue/test-utils' import Foo from './Foo.vue' describe('Foo', () => { it('渲染一个 div', () => { - const wrapper = shallow(Foo, { + const wrapper = shallowMount(Foo, { attachToDocument: true }) expect(wrapper.contains('div')).toBe(true) @@ -75,14 +75,14 @@ describe('Foo', () => { **默认的和具名的插槽:** ```js -import { shallow } from '@vue/test-utils' +import { shallowMount } from '@vue/test-utils' import Foo from './Foo.vue' import Bar from './Bar.vue' import FooBar from './FooBar.vue' describe('Foo', () => { it('renders a div', () => { - const wrapper = shallow(Foo, { + const wrapper = shallowMount(Foo, { slots: { default: [Bar, FooBar], fooBar: FooBar, // Will match , @@ -97,13 +97,13 @@ describe('Foo', () => { **将全局属性存根:** ```js -import { shallow } from '@vue/test-utils' +import { shallowMount } from '@vue/test-utils' import Foo from './Foo.vue' describe('Foo', () => { it('renders a div', () => { const $route = { path: 'http://www.example-path.com' } - const wrapper = shallow(Foo, { + const wrapper = shallowMount(Foo, { mocks: { $route } diff --git a/docs/zh/api/wrapper-array/README.md b/docs/zh/api/wrapper-array/README.md new file mode 100644 index 000000000..d0a5504c6 --- /dev/null +++ b/docs/zh/api/wrapper-array/README.md @@ -0,0 +1,27 @@ +# WrapperArray + +一个 `WrapperArray` 是一个包含 [`Wrapper`](../wrapper/README.md) 数组以及 `Wrapper` 的测试方法等对象。 + +- **属性:** + +### `wrappers` + +`array`: 包含在 `WrapperArray` 内的 `Wrappers` + +###`length` + +`number`:该 `WrapperArray` 中包含的 `Wrapper` 的数量。 + + - **方法:** + +!!!include(docs/zh/api/wrapper-array/at.md)!!! +!!!include(docs/zh/api/wrapper-array/contains.md)!!! +!!!include(docs/zh/api/wrapper-array/destroy.md)!!! +!!!include(docs/zh/api/wrapper-array/filter.md)!!! +!!!include(docs/zh/api/wrapper-array/is.md)!!! +!!!include(docs/zh/api/wrapper-array/isEmpty.md)!!! +!!!include(docs/zh/api/wrapper-array/isVueInstance.md)!!! +!!!include(docs/zh/api/wrapper-array/setData.md)!!! +!!!include(docs/zh/api/wrapper-array/setMethods.md)!!! +!!!include(docs/zh/api/wrapper-array/setProps.md)!!! +!!!include(docs/zh/api/wrapper-array/trigger.md)!!! \ No newline at end of file diff --git a/docs/zh-cn/api/wrapper-array/at.md b/docs/zh/api/wrapper-array/at.md similarity index 96% rename from docs/zh-cn/api/wrapper-array/at.md rename to docs/zh/api/wrapper-array/at.md index 1bfd5a2f4..f7792f3b9 100644 --- a/docs/zh-cn/api/wrapper-array/at.md +++ b/docs/zh/api/wrapper-array/at.md @@ -1,4 +1,4 @@ -# `at(index)` +## at(index) 返回第 `index` 个传入的 `Wrapper` 。数字从 0 开始计数 (比如第一个项目的索引值是 0)。 diff --git a/docs/zh-cn/api/wrapper-array/contains.md b/docs/zh/api/wrapper-array/contains.md similarity index 95% rename from docs/zh-cn/api/wrapper-array/contains.md rename to docs/zh/api/wrapper-array/contains.md index 76cca5a62..4ffd74873 100644 --- a/docs/zh-cn/api/wrapper-array/contains.md +++ b/docs/zh/api/wrapper-array/contains.md @@ -1,4 +1,4 @@ -# `contains(selector)` +### contains(selector) 断言 `WrapperArray` 的每个包裹器都包含选择器。 diff --git a/docs/zh-cn/api/wrapper-array/destroy.md b/docs/zh/api/wrapper-array/destroy.md similarity index 95% rename from docs/zh-cn/api/wrapper-array/destroy.md rename to docs/zh/api/wrapper-array/destroy.md index e78df0708..d02f93155 100644 --- a/docs/zh-cn/api/wrapper-array/destroy.md +++ b/docs/zh/api/wrapper-array/destroy.md @@ -1,4 +1,4 @@ -# `destroy()` +## destroy() 销毁 `WrapperArray` 中的每个 Vue `Wrapper`。 diff --git a/docs/zh-cn/api/wrapper-array/filter.md b/docs/zh/api/wrapper-array/filter.md similarity index 96% rename from docs/zh-cn/api/wrapper-array/filter.md rename to docs/zh/api/wrapper-array/filter.md index cdc59cc90..4a8d86fb9 100644 --- a/docs/zh-cn/api/wrapper-array/filter.md +++ b/docs/zh/api/wrapper-array/filter.md @@ -1,4 +1,4 @@ -# `filter(predicate)` +## filter(predicate) 用一个针对 `Wrapper` 的断言函数过滤 `WrapperArray`。 diff --git a/docs/zh-cn/api/wrapper-array/is.md b/docs/zh/api/wrapper-array/is.md similarity index 95% rename from docs/zh-cn/api/wrapper-array/is.md rename to docs/zh/api/wrapper-array/is.md index 5c86a4b8a..9b7699d7f 100644 --- a/docs/zh-cn/api/wrapper-array/is.md +++ b/docs/zh/api/wrapper-array/is.md @@ -1,4 +1,4 @@ -# `is(selector)` +## is(selector) 断言 `WrapperArray` 的每个 `Wrapper` 的 DOM 节点或 `vm` 匹配[选择器](../selectors.md)。 diff --git a/docs/zh-cn/api/wrapper-array/isEmpty.md b/docs/zh/api/wrapper-array/isEmpty.md similarity index 95% rename from docs/zh-cn/api/wrapper-array/isEmpty.md rename to docs/zh/api/wrapper-array/isEmpty.md index 24a7c5eef..f6792afb8 100644 --- a/docs/zh-cn/api/wrapper-array/isEmpty.md +++ b/docs/zh/api/wrapper-array/isEmpty.md @@ -1,4 +1,4 @@ -# `isEmpty()` +## isEmpty() 断言 `WrapperArray` 的每个 `Wrapper` 都不包含子节点。 diff --git a/docs/zh-cn/api/wrapper-array/isVisible.md b/docs/zh/api/wrapper-array/isVisible.md similarity index 97% rename from docs/zh-cn/api/wrapper-array/isVisible.md rename to docs/zh/api/wrapper-array/isVisible.md index 24673c41f..3537a582f 100644 --- a/docs/zh-cn/api/wrapper-array/isVisible.md +++ b/docs/zh/api/wrapper-array/isVisible.md @@ -1,4 +1,4 @@ -# `isVisible()` +## isVisible() 断言每个 `WrapperArray` 中的每个 `Wrapper` 是否可见。 diff --git a/docs/zh-cn/api/wrapper-array/isVueInstance.md b/docs/zh/api/wrapper-array/isVueInstance.md similarity index 94% rename from docs/zh-cn/api/wrapper-array/isVueInstance.md rename to docs/zh/api/wrapper-array/isVueInstance.md index 36a51a922..9788f1c89 100644 --- a/docs/zh-cn/api/wrapper-array/isVueInstance.md +++ b/docs/zh/api/wrapper-array/isVueInstance.md @@ -1,4 +1,4 @@ -# `isVueInstance()` +## isVueInstance() 断言 `WrapperArray` 的每个 `Wrapper` 都是 Vue 示例。 diff --git a/docs/zh-cn/api/wrapper-array/setData.md b/docs/zh/api/wrapper-array/setData.md similarity index 96% rename from docs/zh-cn/api/wrapper-array/setData.md rename to docs/zh/api/wrapper-array/setData.md index 16549bf4f..bc953a2f1 100644 --- a/docs/zh-cn/api/wrapper-array/setData.md +++ b/docs/zh/api/wrapper-array/setData.md @@ -1,4 +1,4 @@ -# `setData(data)` +## setData(data) 为 `WrapperArray` 的每个 `Wrapper` `vm` 都设置数据并强行更新。 diff --git a/docs/zh-cn/api/wrapper-array/setMethods.md b/docs/zh/api/wrapper-array/setMethods.md similarity index 95% rename from docs/zh-cn/api/wrapper-array/setMethods.md rename to docs/zh/api/wrapper-array/setMethods.md index cd11d24dd..d82c2c383 100644 --- a/docs/zh-cn/api/wrapper-array/setMethods.md +++ b/docs/zh/api/wrapper-array/setMethods.md @@ -1,4 +1,4 @@ -# `setMethods(methods)` +## setMethods(methods) 为 `WrapperArray` 的每个 `Wrapper` `vm` 都设置方法并强行更新。 diff --git a/docs/zh-cn/api/wrapper-array/setProps.md b/docs/zh/api/wrapper-array/setProps.md similarity index 95% rename from docs/zh-cn/api/wrapper-array/setProps.md rename to docs/zh/api/wrapper-array/setProps.md index 5ab4171f3..68d08f3b4 100644 --- a/docs/zh-cn/api/wrapper-array/setProps.md +++ b/docs/zh/api/wrapper-array/setProps.md @@ -1,4 +1,4 @@ -# `setProps(props)` +## setProps(props) 为 `WrapperArray` 的每个 `Wrapper` `vm` 都设置 prop 并强行更新。 diff --git a/docs/zh-cn/api/wrapper-array/trigger.md b/docs/zh/api/wrapper-array/trigger.md similarity index 93% rename from docs/zh-cn/api/wrapper-array/trigger.md rename to docs/zh/api/wrapper-array/trigger.md index e71a9158c..c6a2e8359 100644 --- a/docs/zh-cn/api/wrapper-array/trigger.md +++ b/docs/zh/api/wrapper-array/trigger.md @@ -1,4 +1,4 @@ -# `trigger(eventType [, options ])` +## trigger(eventType [, options ]) 为 `WrapperArray` 的每个 `Wrapper` DOM 节点都触发一个事件。 diff --git a/docs/zh/api/wrapper/README.md b/docs/zh/api/wrapper/README.md new file mode 100644 index 000000000..2bc8d77c7 --- /dev/null +++ b/docs/zh/api/wrapper/README.md @@ -0,0 +1,49 @@ +## Wrapper + +Vue Test Utils 是一个基于包裹器的 API。 + +一个 `Wrapper` 是一个包括了一个挂载组件或 vnode,以及测试该组件或 vnode 的方法。 + +- **属性:** + +### `vm` + +`Component`:这是该 Vue 实例。你可以通过 `wrapper.vm` 访问一个实例所有的[方法和属性](https://vuejs.org/v2/api/#Instance-Properties)。 + +这只存在于 Vue 组件包裹器中 + +### `element` + +`HTMLElement`:包裹器的根 DOM 节点 + +### `options` + +`Object`:一个对象,包含传递给 `mount` 或 `shallow` 的 Vue Test Utils 选项 + +#### `options.attachedToDom` + +`Boolean`:如果 `attachToDom` 传递给了 `mount` 或 `shallow` 则为真 + +- **方法:** + +!!!include(docs/zh/api/wrapper/attributes.md)!!! +!!!include(docs/zh/api/wrapper/classes.md)!!! +!!!include(docs/zh/api/wrapper/contains.md)!!! +!!!include(docs/zh/api/wrapper/destroy.md)!!! +!!!include(docs/zh/api/wrapper/emitted.md)!!! +!!!include(docs/zh/api/wrapper/emittedByOrder.md)!!! +!!!include(docs/zh/api/wrapper/exists.md)!!! +!!!include(docs/zh/api/wrapper/find.md)!!! +!!!include(docs/zh/api/wrapper/findAll.md)!!! +!!!include(docs/zh/api/wrapper/html.md)!!! +!!!include(docs/zh/api/wrapper/is.md)!!! +!!!include(docs/zh/api/wrapper/isEmpty.md)!!! +!!!include(docs/zh/api/wrapper/isVisible.md)!!! +!!!include(docs/zh/api/wrapper/isVueInstance.md)!!! +!!!include(docs/zh/api/wrapper/name.md)!!! +!!!include(docs/zh/api/wrapper/props.md)!!! +!!!include(docs/zh/api/wrapper/setData.md)!!! +!!!include(docs/zh/api/wrapper/setMethods.md)!!! +!!!include(docs/zh/api/wrapper/setProps.md)!!! +!!!include(docs/zh/api/wrapper/text.md)!!! +!!!include(docs/zh/api/wrapper/trigger.md)!!! diff --git a/docs/zh-cn/api/wrapper/attributes.md b/docs/zh/api/wrapper/attributes.md similarity index 93% rename from docs/zh-cn/api/wrapper/attributes.md rename to docs/zh/api/wrapper/attributes.md index ae3f3a9fc..1f393abe9 100644 --- a/docs/zh-cn/api/wrapper/attributes.md +++ b/docs/zh/api/wrapper/attributes.md @@ -1,4 +1,4 @@ -# `attributes()` +## attributes() 返回 `Wrapper` DOM 节点的特性对象。 diff --git a/docs/zh-cn/api/wrapper/classes.md b/docs/zh/api/wrapper/classes.md similarity index 95% rename from docs/zh-cn/api/wrapper/classes.md rename to docs/zh/api/wrapper/classes.md index dcc30ed40..1702e27bb 100644 --- a/docs/zh-cn/api/wrapper/classes.md +++ b/docs/zh/api/wrapper/classes.md @@ -1,4 +1,4 @@ -# `classes()` +## classes() 返回 `Wrapper` DOM 节点的 class。 diff --git a/docs/zh-cn/api/wrapper/contains.md b/docs/zh/api/wrapper/contains.md similarity index 95% rename from docs/zh-cn/api/wrapper/contains.md rename to docs/zh/api/wrapper/contains.md index 82b8097a4..1ceef1808 100644 --- a/docs/zh-cn/api/wrapper/contains.md +++ b/docs/zh/api/wrapper/contains.md @@ -1,4 +1,4 @@ -# `contains(selector)` +## contains(selector) 判断 `Wrapper` 是否包含了一个匹配[选择器](../selectors.md)的元素或组件。 diff --git a/docs/zh-cn/api/wrapper/destroy.md b/docs/zh/api/wrapper/destroy.md similarity index 94% rename from docs/zh-cn/api/wrapper/destroy.md rename to docs/zh/api/wrapper/destroy.md index 976be07f2..de61e11df 100644 --- a/docs/zh-cn/api/wrapper/destroy.md +++ b/docs/zh/api/wrapper/destroy.md @@ -1,4 +1,4 @@ -# `destroy()` +## destroy() 销毁一个 Vue 组件实例。 diff --git a/docs/zh-cn/api/wrapper/emitted.md b/docs/zh/api/wrapper/emitted.md similarity index 82% rename from docs/zh-cn/api/wrapper/emitted.md rename to docs/zh/api/wrapper/emitted.md index d10dc7df8..c266db828 100644 --- a/docs/zh-cn/api/wrapper/emitted.md +++ b/docs/zh/api/wrapper/emitted.md @@ -1,4 +1,4 @@ -# `emitted()` +## emitted() 返回一个包含由 `Wrapper` `vm` 触发的自定义事件的对象。 @@ -15,7 +15,7 @@ wrapper.vm.$emit('foo') wrapper.vm.$emit('foo', 123) /* -`wrapper.emitted()` 返回如下对象: +`wrapper.emitted() 返回如下对象: { foo: [[], [123]] } @@ -44,7 +44,7 @@ expect(wrapper.emitted('foo').length).toBe(2) expect(wrapper.emitted('foo')[1]).toEqual([123]) ``` -该 `.emitted()` 方法每次被调用时都返回相同的对象,而不是返回一个新的,所以当新事件被触发时该对象会被更新: +该 `.emitted() 方法每次被调用时都返回相同的对象,而不是返回一个新的,所以当新事件被触发时该对象会被更新: ```js const emitted = wrapper.emitted() diff --git a/docs/zh-cn/api/wrapper/emittedByOrder.md b/docs/zh/api/wrapper/emittedByOrder.md similarity index 87% rename from docs/zh-cn/api/wrapper/emittedByOrder.md rename to docs/zh/api/wrapper/emittedByOrder.md index ed1797265..cbf7c814c 100644 --- a/docs/zh-cn/api/wrapper/emittedByOrder.md +++ b/docs/zh/api/wrapper/emittedByOrder.md @@ -1,4 +1,4 @@ -# `emittedByOrder()` +## emittedByOrder() 返回一个包含由 `Wrapper` `vm` 触发的自定义事件的数组。 @@ -15,7 +15,7 @@ wrapper.vm.$emit('foo') wrapper.vm.$emit('bar', 123) /* -`wrapper.emittedByOrder()` 返回如下数组: +`wrapper.emittedByOrder() 返回如下数组: [ { name: 'foo', args: [] }, { name: 'bar', args: [123] } diff --git a/docs/zh-cn/api/wrapper/exists.md b/docs/zh/api/wrapper/exists.md similarity index 97% rename from docs/zh-cn/api/wrapper/exists.md rename to docs/zh/api/wrapper/exists.md index 3f047f0d5..0590e4431 100644 --- a/docs/zh-cn/api/wrapper/exists.md +++ b/docs/zh/api/wrapper/exists.md @@ -1,4 +1,4 @@ -# `exists()` +## exists() 断言 `Wrapper` 或 `WrapperArray` 是否存在。 diff --git a/docs/zh-cn/api/wrapper/find.md b/docs/zh/api/wrapper/find.md similarity index 97% rename from docs/zh-cn/api/wrapper/find.md rename to docs/zh/api/wrapper/find.md index f3e47b189..6250eb99e 100644 --- a/docs/zh-cn/api/wrapper/find.md +++ b/docs/zh/api/wrapper/find.md @@ -1,4 +1,4 @@ -# `find(selector)` +## find(selector) 返回匹配选择器的第一个 DOM 节点或 Vue 组件的 [`Wrapper`](README.md)。 diff --git a/docs/zh-cn/api/wrapper/findAll.md b/docs/zh/api/wrapper/findAll.md similarity index 96% rename from docs/zh-cn/api/wrapper/findAll.md rename to docs/zh/api/wrapper/findAll.md index 18562bfa9..152e1f0c7 100644 --- a/docs/zh-cn/api/wrapper/findAll.md +++ b/docs/zh/api/wrapper/findAll.md @@ -1,4 +1,4 @@ -# `findAll(selector)` +## findAll(selector) 返回一个匹配选择器的 DOM 节点或 Vue 组件的 [`Wrappers`](README.md) 的 [`WrapperArray`](../wrapper-array/README.md)。 diff --git a/docs/zh-cn/api/wrapper/html.md b/docs/zh/api/wrapper/html.md similarity index 95% rename from docs/zh-cn/api/wrapper/html.md rename to docs/zh/api/wrapper/html.md index 76ea69e38..81c4e404d 100644 --- a/docs/zh-cn/api/wrapper/html.md +++ b/docs/zh/api/wrapper/html.md @@ -1,4 +1,4 @@ -# `html()` +## html() 返回 `Wrapper` DOM 节点的 HTML 字符串。 diff --git a/docs/zh-cn/api/wrapper/is.md b/docs/zh/api/wrapper/is.md similarity index 94% rename from docs/zh-cn/api/wrapper/is.md rename to docs/zh/api/wrapper/is.md index 0abd7295b..0669a2ffe 100644 --- a/docs/zh-cn/api/wrapper/is.md +++ b/docs/zh/api/wrapper/is.md @@ -1,4 +1,4 @@ -# `is(selector)` +## is(selector) 断言 `Wrapper` DOM 节点或 `vm` 匹配[选择器](../selectors.md)。 diff --git a/docs/zh-cn/api/wrapper/isEmpty.md b/docs/zh/api/wrapper/isEmpty.md similarity index 94% rename from docs/zh-cn/api/wrapper/isEmpty.md rename to docs/zh/api/wrapper/isEmpty.md index fc45a7baa..ebff8357d 100644 --- a/docs/zh-cn/api/wrapper/isEmpty.md +++ b/docs/zh/api/wrapper/isEmpty.md @@ -1,4 +1,4 @@ -# `isEmpty()` +## isEmpty() 断言 `Wrapper` 并不包含子节点。 diff --git a/docs/zh-cn/api/wrapper/isVisible.md b/docs/zh/api/wrapper/isVisible.md similarity index 96% rename from docs/zh-cn/api/wrapper/isVisible.md rename to docs/zh/api/wrapper/isVisible.md index c7b82aac6..962accc3c 100644 --- a/docs/zh-cn/api/wrapper/isVisible.md +++ b/docs/zh/api/wrapper/isVisible.md @@ -1,4 +1,4 @@ -# `isVisible()` +## isVisible() 断言 `Wrapper` 是否可见。 diff --git a/docs/zh-cn/api/wrapper/isVueInstance.md b/docs/zh/api/wrapper/isVueInstance.md similarity index 92% rename from docs/zh-cn/api/wrapper/isVueInstance.md rename to docs/zh/api/wrapper/isVueInstance.md index cf38f9388..9a64ea803 100644 --- a/docs/zh-cn/api/wrapper/isVueInstance.md +++ b/docs/zh/api/wrapper/isVueInstance.md @@ -1,4 +1,4 @@ -# `isVueInstance()` +## isVueInstance() 断言 `Wrapper` 是 Vue 示例。 diff --git a/docs/zh-cn/api/wrapper/name.md b/docs/zh/api/wrapper/name.md similarity index 96% rename from docs/zh-cn/api/wrapper/name.md rename to docs/zh/api/wrapper/name.md index 78b3b1e36..347a1a23f 100644 --- a/docs/zh-cn/api/wrapper/name.md +++ b/docs/zh/api/wrapper/name.md @@ -1,4 +1,4 @@ -# `name()` +## name() 如果 `Wrapper` 包含一个 Vue 示例则返回组件名,否则返回 `Wrapper` DOM 节点的标签名。 diff --git a/docs/zh-cn/api/wrapper/props.md b/docs/zh/api/wrapper/props.md similarity index 96% rename from docs/zh-cn/api/wrapper/props.md rename to docs/zh/api/wrapper/props.md index 72589f784..a00a8b3fc 100644 --- a/docs/zh-cn/api/wrapper/props.md +++ b/docs/zh/api/wrapper/props.md @@ -1,4 +1,4 @@ -# `props()` +## props() 返回 `Wrapper` `vm` 的 props 对象。 diff --git a/docs/zh-cn/api/wrapper/setData.md b/docs/zh/api/wrapper/setData.md similarity index 94% rename from docs/zh-cn/api/wrapper/setData.md rename to docs/zh/api/wrapper/setData.md index d4036a06d..4efb348cf 100644 --- a/docs/zh-cn/api/wrapper/setData.md +++ b/docs/zh/api/wrapper/setData.md @@ -1,4 +1,4 @@ -# `setData(data)` +## setData(data) 设置 `Wrapper` `vm` 的属性并强制更新。 diff --git a/docs/zh-cn/api/wrapper/setMethods.md b/docs/zh/api/wrapper/setMethods.md similarity index 95% rename from docs/zh-cn/api/wrapper/setMethods.md rename to docs/zh/api/wrapper/setMethods.md index c7ad44837..10a6fcbf9 100644 --- a/docs/zh-cn/api/wrapper/setMethods.md +++ b/docs/zh/api/wrapper/setMethods.md @@ -1,4 +1,4 @@ -# `setMethods(methods)` +## setMethods(methods) 设置 `Wrapper` `vm` 的方法并强制更新。 diff --git a/docs/zh-cn/api/wrapper/setProps.md b/docs/zh/api/wrapper/setProps.md similarity index 97% rename from docs/zh-cn/api/wrapper/setProps.md rename to docs/zh/api/wrapper/setProps.md index 87798aaad..275655372 100644 --- a/docs/zh-cn/api/wrapper/setProps.md +++ b/docs/zh/api/wrapper/setProps.md @@ -1,4 +1,4 @@ -# `setProps(props)` +## setProps(props) - **参数:** - `{Object} props` diff --git a/docs/zh-cn/api/wrapper/text.md b/docs/zh/api/wrapper/text.md similarity index 95% rename from docs/zh-cn/api/wrapper/text.md rename to docs/zh/api/wrapper/text.md index 8e51c6d2d..e611fa681 100644 --- a/docs/zh-cn/api/wrapper/text.md +++ b/docs/zh/api/wrapper/text.md @@ -1,4 +1,4 @@ -# `text()` +## text() 返回 `Wrapper` 的文本内容。 diff --git a/docs/zh-cn/api/wrapper/trigger.md b/docs/zh/api/wrapper/trigger.md similarity index 96% rename from docs/zh-cn/api/wrapper/trigger.md rename to docs/zh/api/wrapper/trigger.md index d185f46ec..14cfdf5b0 100644 --- a/docs/zh-cn/api/wrapper/trigger.md +++ b/docs/zh/api/wrapper/trigger.md @@ -1,4 +1,4 @@ -# `trigger(eventType [, options ])` +## trigger(eventType [, options ]) 在该 `Wrapper` DOM 节点上触发一个事件。 diff --git a/docs/zh/guides/README.md b/docs/zh/guides/README.md new file mode 100644 index 000000000..52fddc014 --- /dev/null +++ b/docs/zh/guides/README.md @@ -0,0 +1,12 @@ +# 教程 + +!!!include(docs/zh/guides/getting-started.md)!!! +!!!include(docs/zh/guides/common-tips.md)!!! +!!!include(docs/zh/guides/dom-events.md)!!! +!!!include(docs/zh/guides/choosing-a-test-runner.md)!!! +!!!include(docs/zh/guides/testing-SFCs-with-jest.md)!!! +!!!include(docs/zh/guides/testing-SFCs-with-mocha-webpack.md)!!! +!!!include(docs/zh/guides/testing-SFCs-with-karma.md)!!! +!!!include(docs/zh/guides/testing-async-components.md)!!! +!!!include(docs/zh/guides/using-with-vue-router.md)!!! +!!!include(docs/zh/guides/using-with-vuex.md)!!! \ No newline at end of file diff --git a/docs/zh-cn/guides/choosing-a-test-runner.md b/docs/zh/guides/choosing-a-test-runner.md similarity index 96% rename from docs/zh-cn/guides/choosing-a-test-runner.md rename to docs/zh/guides/choosing-a-test-runner.md index c3499636a..efb8fe366 100644 --- a/docs/zh-cn/guides/choosing-a-test-runner.md +++ b/docs/zh/guides/choosing-a-test-runner.md @@ -1,4 +1,4 @@ -# 选择一个测试运行器 +## 选择一个测试运行器 测试运行器 (test runner) 就是运行测试的程序。 @@ -10,7 +10,7 @@ - [mocha-webpack](https://github.com/zinserjan/mocha-webpack) 是一个 webpack + Mocha 的包裹器,同时包含了更顺畅的接口和侦听模式。这些设置的好处在于我们能够通过 webpack + `vue-loader` 得到完整的单文件组件支持,但这本身是需要很多配置的。 -## 浏览器环境 +### 浏览器环境 Vue Test Utils 依赖浏览器环境。技术上讲你可以将其运行在一个真实的浏览器,但是我们并不推荐,因为在不同的平台上都启动真实的浏览器是很复杂的。我们推荐取而代之的是用 [JSDOM](https://github.com/tmpvar/jsdom) 在 Node 虚拟浏览器环境运行测试。 @@ -25,7 +25,7 @@ npm install --save-dev jsdom jsdom-global require('jsdom-global')() ``` -## 测试单文件组件 +### 测试单文件组件 Vue 的单文件组件在它们运行于 Node 或浏览器之前是需要预编译的。我们推荐两种方式完成编译:通过一个 Jest 预编译器,或直接使用 webpack。 @@ -36,7 +36,7 @@ Vue 的单文件组件在它们运行于 Node 或浏览器之前是需要预编 - [用 Jest 测试单文件组件](./testing-SFCs-with-jest.md) - [用 Mocha 和 webpack 测试单文件组件](./testing-SFCs-with-mocha-webpack.md) -## 相关资料 +### 相关资料 - [测试运行器性能比拼](https://github.com/eddyerburgh/vue-unit-test-perf-comparison) - [使用 Jest 的示例工程](https://github.com/vuejs/vue-test-utils-jest-example) diff --git a/docs/zh-cn/guides/common-tips.md b/docs/zh/guides/common-tips.md similarity index 95% rename from docs/zh-cn/guides/common-tips.md rename to docs/zh/guides/common-tips.md index 7f896da5d..1dc5c8074 100644 --- a/docs/zh-cn/guides/common-tips.md +++ b/docs/zh/guides/common-tips.md @@ -1,6 +1,6 @@ -# 常用技巧 +## 常用技巧 -## 明白要测试的是什么 +### 明白要测试的是什么 对于 UI 组件来说,我们不推荐一味追求行级覆盖率,因为它会导致我们过分关注组件的内部实现细节,从而导致琐碎的测试。 @@ -12,7 +12,7 @@ 这个话题的细节在 [Matt O'Connell 一份非常棒的演讲](http://slides.com/mattoconnell/deck#/)中有更多的讨论。 -## 浅渲染 +### 浅渲染 在测试用例中,我们通常希望专注在一个孤立的单元中测试组件,避免对其子组件的行为进行间接的断言。 @@ -27,7 +27,7 @@ const wrapper = shallow(Component) // 返回一个包裹器,包含一个挂载 wrapper.vm // 挂载的 Vue 实例 ``` -## 断言触发的事件 +### 断言触发的事件 每个挂载的包裹器都会通过其背后的 Vue 实例自动记录所有被触发的事件。你可以用 `wrapper.emitted()` 方法取回这些事件记录。 @@ -58,7 +58,7 @@ expect(wrapper.emitted().foo[1]).toEqual([123]) 你也可以调用 [`wrapper.emittedByOrder()`](../api/wrapper/emittedByOrder.md) 获取一个按触发先后排序的事件数组。 -## 操作组件状态 +### 操作组件状态 你可以在包裹器上用 `setData` 或 `setProps` 方法直接操作组件状态: @@ -68,7 +68,7 @@ wrapper.setData({ count: 10 }) wrapper.setProps({ foo: 'bar' }) ``` -## 仿造 Prop +### 仿造 Prop 你可以使用 Vue 在内置 `propsData` 选项向组件传入 prop: @@ -86,7 +86,7 @@ mount(Component, { *想查阅所有选项的完整列表,请移步该文档的[挂载选项](../api/options.md)章节。* -## 应用全局的插件和混入 +### 应用全局的插件和混入 有些组件可能依赖一个全局插件或混入 (mixin) 的功能注入,比如 `vuex` 和 `vue-router`。 @@ -109,7 +109,7 @@ mount(Component, { **注意有些插件会为全局的 Vue 构造函数添加只读属性,比如 Vue Router。这使得我们无法在一个 `localVue` 构造函数上二次安装该插件,或伪造这些只读属性。** -## 仿造注入 +### 仿造注入 另一个注入 prop 的策略就是简单的仿造它们。你可以使用 `mocks` 选项: @@ -130,10 +130,10 @@ mount(Component, { }) ``` -## 处理路由 +### 处理路由 因为路由需要在应用的全局结构中进行定义,且引入了很多组件,所以最好集成到 end-to-end 测试。对于依赖 `vue-router` 功能的独立的组件来说,你可以使用上面提到的技术仿造它们。 -## 探测样式 +### 探测样式 当你的测试运行在 `jsdom` 中时,可以只探测到内联样式。 diff --git a/docs/zh-cn/guides/dom-events.md b/docs/zh/guides/dom-events.md similarity index 96% rename from docs/zh-cn/guides/dom-events.md rename to docs/zh/guides/dom-events.md index 9a80bf745..d53e35203 100644 --- a/docs/zh-cn/guides/dom-events.md +++ b/docs/zh/guides/dom-events.md @@ -1,6 +1,6 @@ -# 测试键盘、鼠标等其它 DOM 事件 +## 测试键盘、鼠标等其它 DOM 事件 -## 触发事件 +### 触发事件 `Wrapper` 暴露了一个 `trigger` 方法。它可以用来触发 DOM 事件。 @@ -18,7 +18,7 @@ const wrapper = mount(MyComponent) wrapper.find('button').trigger('click') ``` -## 选项 +### 选项 其 `trigger` 方法接受一个可选的 `options` 对象。这个 `options` 对象里的属性会被添加到事件中。 @@ -31,7 +31,7 @@ wrapper.trigger('click', { button: 0 }) ``` -## 鼠标点击示例 +### 鼠标点击示例 **待测试的组件** @@ -85,7 +85,7 @@ describe('点击事件', () => { }) ``` -## 键盘示例 +### 键盘示例 **待测试的组件** @@ -207,6 +207,6 @@ describe('键盘事件测试', () => { | pageup | 33 | | pagedown | 34 | -## 重要事项 +### 重要事项 Vue Test Utils 是同步触发事件。因此 `Vue.nextTick` 不是必须的。 diff --git a/docs/zh-cn/guides/getting-started.md b/docs/zh/guides/getting-started.md similarity index 99% rename from docs/zh-cn/guides/getting-started.md rename to docs/zh/guides/getting-started.md index 83e801150..ae2337c4f 100644 --- a/docs/zh-cn/guides/getting-started.md +++ b/docs/zh/guides/getting-started.md @@ -1,6 +1,6 @@ -# 起步 +## 起步 -## 安装 +### 安装 快速尝鲜 Vue Test Utils 的办法就是克隆我们的 demo 仓库再加上基本的设置和依赖安装。 @@ -138,7 +138,7 @@ it('will catch the error using a promise', () => { }) ``` -## 下一步是什么 +### 下一步是什么 - [选择一个测试运行器](./choosing-a-test-runner.md)以把 Vue Test Utils 集成到你的工程里。 - 移步[撰写测试的常见技巧](./common-tips.md)以学习更多。 diff --git a/docs/zh-cn/guides/testing-SFCs-with-jest.md b/docs/zh/guides/testing-SFCs-with-jest.md similarity index 96% rename from docs/zh-cn/guides/testing-SFCs-with-jest.md rename to docs/zh/guides/testing-SFCs-with-jest.md index 3afd4cc3c..f3165d00d 100644 --- a/docs/zh-cn/guides/testing-SFCs-with-jest.md +++ b/docs/zh/guides/testing-SFCs-with-jest.md @@ -1,10 +1,10 @@ -# 用 Jest 测试单文件组件 +## 用 Jest 测试单文件组件 > 我们在 [GitHub](https://github.com/vuejs/vue-test-utils-jest-example) 上放有一个关于这些设置的示例工程。 Jest 是一个由 Facebook 开发的测试运行器,致力于提供一个“bettery-included”单元测试解决方案。你可以在其[官方文档](https://facebook.github.io/jest/)学习到更多 Jest 的知识。 -## 安装 Jest +### 安装 Jest 我们假定你在一开始已经安装并配置好了 webpack、vue-loader 和 Babel——例如通过 `vue-cli` 创建了 `webpack-simple` 模板脚手架。 @@ -25,7 +25,7 @@ $ npm install --save-dev jest @vue/test-utils } ``` -## 在 Jest 中处理单文件组件 +### 在 Jest 中处理单文件组件 为了告诉 Jest 如何处理 `*.vue` 文件,我们需要安装和配置 `vue-jest` 预处理器: @@ -55,7 +55,7 @@ npm install --save-dev vue-jest > **注意:**`vue-jest` 目前并不支持 `vue-loader` 所有的功能,比如自定义块和样式加载。额外的,诸如代码分隔等 webpack 特有的功能也是不支持的。如果要使用这些不支持的特性,你需要用 Mocha 取代 Jest 来运行你的测试,同时用 webpack 来编译你的组件。想知道如何起步,请阅读教程里的[用 Mocha + webpack 测试单文件组件](./testing-SFCs-with-mocha-webpack.md)。 -## 处理 webpack 别名 +### 处理 webpack 别名 如果你在 webpack 中配置了别名解析,比如把 `@` 设置为 `/src` 的别名,那么你也需要用 `moduleNameMapper` 选项为 Jest 增加一个匹配配置: @@ -72,7 +72,7 @@ npm install --save-dev vue-jest } ``` -## 为 Jest 配置 Babel +### 为 Jest 配置 Babel 尽管最新版本的 Node 已经支持绝大多数的 ES2015 特性,你可能仍然想要在你的测试中使用 ES modules 语法和 stage-x 的特性。为此我们需要安装 `babel-jest`: @@ -122,7 +122,7 @@ npm install --save-dev babel-jest } ``` -## 测试快照 +### 测试快照 你可以使用 [`vue-server-renderer`](https://github.com/vuejs/vue/tree/dev/packages/vue-server-renderer) 将组件渲染为一个字符串,这样它就可以为 [Jest 快照测试](https://facebook.github.io/jest/docs/en/snapshot-testing.html) 保存一个快照。 @@ -147,13 +147,13 @@ npm install --save-dev jest-serializer-vue } ``` -## 放置测试文件 +### 放置测试文件 默认情况下,Jest 将会递归的找到整个工程里所有 `.spec.js` 或 `.test.js` 扩展名的文件。如果这不符合你的需求,你也可以在 `package.json` 里的配置段落中[改变它的 `testRegex`](https://facebook.github.io/jest/docs/en/configuration.html#testregex-string)。 Jest 推荐你在被测试代码的所在目录下创建一个 `__tests__` 目录,但你也可以为你的测试文件随意设计自己习惯的文件结构。不过要当心 Jest 会为快照测试在临近测试文件的地方创建一个 `__snapshots__` 目录。 -## 测试覆盖率 +### 测试覆盖率 Jest 可以被用来生成多种格式的测试覆盖率报告。以下是一个简单的起步的例子: @@ -185,7 +185,7 @@ Jest 可以被用来生成多种格式的测试覆盖率报告。以下是一个 更多文档内容请移步至 [Jest 配置文档](https://facebook.github.io/jest/docs/en/configuration.html#collectcoverage-boolean),在那里你可以找到覆盖率阀值、目标输出目录等选项。 -## 测试规范示例 +### 测试规范示例 如果你已经熟悉了 Jasmine,你应该很适应 Jest 的[断言 API](https://facebook.github.io/jest/docs/en/expect.html#content): @@ -201,7 +201,7 @@ describe('Component', () => { }) ``` -## 相关资料 +### 相关资料 - [该设置的示例工程](https://github.com/vuejs/vue-test-utils-jest-example) - [Vue Conf 2017 中的示例和幻灯片](https://github.com/codebryo/vue-testing-with-jest-conf17) diff --git a/docs/zh-cn/guides/testing-SFCs-with-karma.md b/docs/zh/guides/testing-SFCs-with-karma.md similarity index 98% rename from docs/zh-cn/guides/testing-SFCs-with-karma.md rename to docs/zh/guides/testing-SFCs-with-karma.md index e8232e7bb..84c889524 100644 --- a/docs/zh-cn/guides/testing-SFCs-with-karma.md +++ b/docs/zh/guides/testing-SFCs-with-karma.md @@ -1,10 +1,10 @@ -# 用 Karma 测试单文件组件 +## 用 Karma 测试单文件组件 > 我们在 [GitHub](https://github.com/eddyerburgh/vue-test-utils-karma-example) 上放有一个该设置的示例工程。 Karma 是一个启动浏览器运行测试并生成报告的测试运行器。我们会使用 Mocha 框架撰写测试,同时使用 chai 作为断言库。 -## 设置 Mocha +### 设置 Mocha 我们会假设你一开始已经正确配置好了 webpack、vue-loader 和 Babel——例如通过 `vue-cli` 的 `webpack-simple` 模板搭建起来。 diff --git a/docs/zh-cn/guides/testing-SFCs-with-mocha-webpack.md b/docs/zh/guides/testing-SFCs-with-mocha-webpack.md similarity index 98% rename from docs/zh-cn/guides/testing-SFCs-with-mocha-webpack.md rename to docs/zh/guides/testing-SFCs-with-mocha-webpack.md index 0f14713ac..73a1997a7 100644 --- a/docs/zh-cn/guides/testing-SFCs-with-mocha-webpack.md +++ b/docs/zh/guides/testing-SFCs-with-mocha-webpack.md @@ -1,4 +1,4 @@ -# 用 Mocha 和 webpack 测试单文件组件 +## 用 Mocha 和 webpack 测试单文件组件 > 我们在 [GitHub](https://github.com/vuejs/vue-test-utils-mocha-webpack-example) 上放有一个关于这些设置的示例工程。 @@ -6,7 +6,7 @@ 从技术的角度讲,你可以使用任何喜欢的测试运行器并把所有的东西都手动串联起来,但是我们已经找到了 [`mocha-webpack`](https://github.com/zinserjan/mocha-webpack) 能够为这项特殊任务提供非常流畅的体验。 -## 设置 `mocha-webpack` +### 设置 `mocha-webpack` 我们假定你在一开始已经安装并配置好了 webpack、vue-loader 和 Babel——例如通过 `vue-cli` 创建了 `webpack-simple` 模板脚手架。 diff --git a/docs/zh-cn/guides/testing-async-components.md b/docs/zh/guides/testing-async-components.md similarity index 99% rename from docs/zh-cn/guides/testing-async-components.md rename to docs/zh/guides/testing-async-components.md index add0c7def..89f6a71e5 100644 --- a/docs/zh-cn/guides/testing-async-components.md +++ b/docs/zh/guides/testing-async-components.md @@ -1,4 +1,4 @@ -# 测试异步行为 +## 测试异步行为 为了让测试变得简单,`vue-test-utils` _同步_应用 DOM 更新。不过当测试一个带有回调或 Promise 等异步行为的组件时,你需要留意一些技巧。 diff --git a/docs/zh-cn/guides/using-with-vue-router.md b/docs/zh/guides/using-with-vue-router.md similarity index 92% rename from docs/zh-cn/guides/using-with-vue-router.md rename to docs/zh/guides/using-with-vue-router.md index 193b664cc..9dbb51c68 100644 --- a/docs/zh-cn/guides/using-with-vue-router.md +++ b/docs/zh/guides/using-with-vue-router.md @@ -1,6 +1,6 @@ -# 配合 Vue Router 使用 +## 配合 Vue Router 使用 -## 在测试中安装 Vue Router +### 在测试中安装 Vue Router 在测试中,你应该杜绝在基本的 Vue 构造函数中安装 Vue Router。安装 Vue Router 之后 Vue 的原型上会增加 `$route` 和 `$router` 这两个只读属性。 @@ -22,7 +22,7 @@ shallow(Component, { > **注意:**在一个 `localVue` 上安装 Vue Router 时也会将 `$route` 和 `$router` 作为两个只读属性添加给该 `localVue`。这意味着如果你使用安装了 Vue Router 的 `localVue`,则不能在挂在一个组件时使用 `mocks` 选项来覆写 `$route` 和 `$router`。 -## 测试使用了 `router-link` 或 `router-view` 的组件 +### 测试使用了 `router-link` 或 `router-view` 的组件 当你安装 Vue Router 的时候,`router-link` 和 `router-view` 组件就被注册了。这意味着我们无需再导入可以在应用的任意地方使用它们。 @@ -52,7 +52,7 @@ shallow(Component, { }) ``` -## 伪造 `$route` 和 `$router` +### 伪造 `$route` 和 `$router` 有的时候你想要测试一个组件在配合 `$route` 和 `$router` 对象的参数时的行为。这时候你可以传递自定义假数据给 Vue 实例。 @@ -72,7 +72,7 @@ const wrapper = shallow(Component, { wrapper.vm.$router.path // /some/path ``` -## 常识 +### 常识 安装 Vue Router 会在 Vue 的原型上添加 `$route` 和 `$router` 只读属性。 diff --git a/docs/zh-cn/guides/using-with-vuex.md b/docs/zh/guides/using-with-vuex.md similarity index 99% rename from docs/zh-cn/guides/using-with-vuex.md rename to docs/zh/guides/using-with-vuex.md index cf95484ae..e902ca281 100644 --- a/docs/zh-cn/guides/using-with-vuex.md +++ b/docs/zh/guides/using-with-vuex.md @@ -1,9 +1,7 @@ -# 配合 Vuex 使用 +## 配合 Vuex 使用 在本教程中,我们将会看到如何用 Vue Test Utils 测试组件中的 Vuex,以及如何测试一个 Vuex store。 -## 在组件中测试 Vuex - ### 伪造 Action 我们来看一些代码。 @@ -109,7 +107,7 @@ describe('Actions.vue', () => { 好的,现在我们可以伪造 action 了,我们再来看看伪造 getter。 -## 伪造 Getter +### 伪造 Getter ``` html @@ -261,7 +259,7 @@ describe('Modules.vue', () => { }) ``` -## 测试一个 Vuex Store +### 测试一个 Vuex Store 这里有两个测试 Vuex store 的方式。第一个方式是分别单元化测试 getter、mutation 和 action。第二个方式是创建一个 store 并针对其进行测试。我们接下来看看这两种方式如何。 @@ -382,7 +380,7 @@ test('updates evenOrOdd getter when increment is commited', () => { 注意我们在创建一个 store 之前使用了 `cloneDeep` 来克隆 store 配置。这是因为 Vuex 会改变用来创建 store 的选项对象。为了确保我们能为每一个测试都提供一个干净的 store,我们需要克隆 `storeConfig` 对象。 -## 相关资料 +### 相关资料 - [测试组件的示例工程](https://github.com/eddyerburgh/vue-test-utils-vuex-example) - [测试 store 的示例工程](https://github.com/eddyerburgh/testing-vuex-store-example) From f60c453ce76ee0406bdacc861483f213d9a1c067 Mon Sep 17 00:00:00 2001 From: eddyerburgh Date: Sat, 19 May 2018 21:38:56 +0100 Subject: [PATCH 4/9] remove vuepress from package.json before circle --- .circleci/config.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index e1e9ff74c..6791b67e9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -17,6 +17,9 @@ jobs: steps: - checkout - *restore_node_modules + -run: + name: remove vuepress from dependencies + command: sed '/vuepress/ d' package.json - run: name: yarn --version command: yarn --version From 66deff4f19d124f84ea27c73195eac7aed0fe3cf Mon Sep 17 00:00:00 2001 From: eddyerburgh Date: Sat, 19 May 2018 21:42:19 +0100 Subject: [PATCH 5/9] fix broken yaml --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6791b67e9..429e183b6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -17,7 +17,7 @@ jobs: steps: - checkout - *restore_node_modules - -run: + - run: name: remove vuepress from dependencies command: sed '/vuepress/ d' package.json - run: From 09021b9b34def9f5f974a56e996c992b24583b2b Mon Sep 17 00:00:00 2001 From: eddyerburgh Date: Sat, 19 May 2018 21:51:29 +0100 Subject: [PATCH 6/9] fix broken yaml --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 429e183b6..bfaa46bc8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -18,8 +18,8 @@ jobs: - checkout - *restore_node_modules - run: - name: remove vuepress from dependencies - command: sed '/vuepress/ d' package.json + name: remove vuepress from dependencies + command: sed '/vuepress/ d' package.json - run: name: yarn --version command: yarn --version From f8fdbbdc8e7c8d1c70f90523cdf8a44207aab4fc Mon Sep 17 00:00:00 2001 From: eddyerburgh Date: Sat, 19 May 2018 22:00:43 +0100 Subject: [PATCH 7/9] Use sed inplace --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index bfaa46bc8..dd43bdbd0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -19,7 +19,7 @@ jobs: - *restore_node_modules - run: name: remove vuepress from dependencies - command: sed '/vuepress/ d' package.json + command: sed -i '/vuepress/ d' package.json - run: name: yarn --version command: yarn --version From 1d4105793de3352fc7af8c999f8ad47e517e4344 Mon Sep 17 00:00:00 2001 From: eddyerburgh Date: Sat, 19 May 2018 22:36:25 +0100 Subject: [PATCH 8/9] chore: add redirects --- docs/.vuepress/_redirects | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 docs/.vuepress/_redirects diff --git a/docs/.vuepress/_redirects b/docs/.vuepress/_redirects new file mode 100644 index 000000000..b9591b7ae --- /dev/null +++ b/docs/.vuepress/_redirects @@ -0,0 +1,9 @@ +/en/* /:splat +/api/wrapper/* /api/wrapper.html/#:splat +/api/wrapper-array/* /api/wrapper-array.html/#:splat + +/ja/api/wrapper/* /ja/api/wrapper.html/#:splat +/ja/api/wrapper-array/* /ja/api/wrapper-array.html/#:splat + +/zh/api/wrapper/* /zh/api/wrapper.html/#:splat +/zh/api/wrapper-array/* /zh/api/wrapper-array.html/#:splat \ No newline at end of file From 4ddb5f933c97ce7c0914a6ed9490de8a45f36445 Mon Sep 17 00:00:00 2001 From: eddyerburgh Date: Sat, 19 May 2018 22:43:01 +0100 Subject: [PATCH 9/9] add more redirects --- docs/.vuepress/_redirects | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/.vuepress/_redirects b/docs/.vuepress/_redirects index b9591b7ae..15bc2cc1a 100644 --- a/docs/.vuepress/_redirects +++ b/docs/.vuepress/_redirects @@ -1,9 +1,26 @@ /en/* /:splat + +/api/mount /api/#mount +/api/shallowMount /api/#shallowmount +/api/createLocalVue /api/#createlocalvue +/api/config /api/#config + /api/wrapper/* /api/wrapper.html/#:splat /api/wrapper-array/* /api/wrapper-array.html/#:splat +/ja/api/mount /ja/api/#mount +/ja/api/shallowMount /ja/api/#shallowmount +/ja/api/createLocalVue /ja/api/#createlocalvue +/ja/api/config /ja/api/#config + +/ja/api/wrapper/* /ja/api/wrapper.html/#:splat /ja/api/wrapper/* /ja/api/wrapper.html/#:splat /ja/api/wrapper-array/* /ja/api/wrapper-array.html/#:splat +/zh/api/mount /zh/api/#mount +/zh/api/shallowMount /zh/api/#shallowmount +/zh/api/createLocalVue /zh/api/#createlocalvue +/zh/api/config /zh/api/#config + /zh/api/wrapper/* /zh/api/wrapper.html/#:splat /zh/api/wrapper-array/* /zh/api/wrapper-array.html/#:splat \ No newline at end of file