From b369fb43b2cbecf361cf33451b14b59d493f7269 Mon Sep 17 00:00:00 2001 From: wangsongc Date: Wed, 27 Jan 2021 18:15:07 +0800 Subject: [PATCH] Add test framework --- .babelrc | 9 +++ .gitignore | 1 + jest.config.js | 28 +++++++++ package.json | 10 ++- .../__snapshots__/mavon-editor.spec.js.snap | 63 +++++++++++++++++++ tests/unit/mavon-editor.spec.js | 23 +++++++ 6 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 jest.config.js create mode 100644 tests/unit/__snapshots__/mavon-editor.spec.js.snap create mode 100644 tests/unit/mavon-editor.spec.js diff --git a/.babelrc b/.babelrc index 205758282..a4644f906 100644 --- a/.babelrc +++ b/.babelrc @@ -3,8 +3,17 @@ ["env", { "modules": false }], + [ + "babel-preset-env", + { + "targets": { + "node": "current" + } + } + ], "stage-2" ], + "plugins": ["transform-runtime"], "comments": false } diff --git a/.gitignore b/.gitignore index bc39f0063..3c8ab6932 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ package-lock.json .DS_Store .ftpconfig *.swp +/tests/unit/coverage/* diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 000000000..e282da1c9 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,28 @@ +module.exports = { + transformIgnorePatterns: ["/node_modules/(?!auto-textarea|@vue|src)"], + testMatch: [ + "**/tests/unit/*.spec.js" + ], + verbose: true, + moduleFileExtensions: ['js', 'vue', 'md', 'html'], + moduleNameMapper: { + '\\.(css|scss)$': 'identity-obj-proxy', + '^@/(.*)$': '/src/$1' + }, + transform: { + "^.+\\.js$": "/node_modules/babel-jest", + "^.+\\.vue$": "/node_modules/vue-jest", + '.*\\.(yml|html|md)$': 'jest-raw-loader' + }, + // setupFiles: ['/tests/unit/setup.js'], + coverageDirectory: '/tests/unit/coverage', + collectCoverageFrom: [ + 'src/**/*.{js,vue}', + '!src/main.js', + '!src/dev/**', + '!**/node_modules/**' + ], + snapshotSerializers: [ + "jest-serializer-vue" + ] +} diff --git a/package.json b/package.json index 57ca9f626..b0362644f 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "dist/mavon-editor.js", "types": "./mavon-editor.d.ts", "scripts": { - "test": "echo true", + "test": "jest", + "test:coverage": "jest --coverage", "dev": "webpack-dev-server --open --progress --config webpack/webpack.dev.js", "build": "webpack --progress --config webpack/webpack.build.js", "lint:fix": "eslint --fix --ext .js,.vue src/", @@ -34,11 +35,13 @@ "xss": "^1.0.6" }, "devDependencies": { + "@vue/test-utils": "^1.1.2", "auto-textarea": "^1.4.0", "autoprefixer": "^8.3.0", "axios": "^0.19.0", "babel-core": "^6.0.0", "babel-eslint": "^8.0.2", + "babel-jest": "^23.6.0", "babel-loader": "^7.0.0", "babel-plugin-transform-runtime": "^6.23.0", "babel-polyfill": "^6.26.0", @@ -58,6 +61,10 @@ "github-markdown-css": "^2.6.0", "html-loader": "^0.4.5", "html-webpack-plugin": "^2.28.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^23.6.0", + "jest-raw-loader": "^1.0.1", + "jest-serializer-vue": "^2.0.2", "katex": "^0.11.1", "keycode": "^2.1.9", "less": "^2.7.2", @@ -104,6 +111,7 @@ "stylus-loader": "^2.4.0", "url-loader": "^0.5.8", "vue": "^2.3.4", + "vue-jest": "^3.0.7", "vue-loader": "^12.0.3", "vue-style-loader": "^3.0.0", "vue-template-compiler": "^2.2.1", diff --git a/tests/unit/__snapshots__/mavon-editor.spec.js.snap b/tests/unit/__snapshots__/mavon-editor.spec.js.snap new file mode 100644 index 000000000..0b33fa4d5 --- /dev/null +++ b/tests/unit/__snapshots__/mavon-editor.spec.js.snap @@ -0,0 +1,63 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`snapshot snapshot 1`] = ` +
+
+
+ + + + + +
+
+
+
+
+
+

+
+
+
+
+ +
+ + + +
+ + + + +
+
+
+
+`; diff --git a/tests/unit/mavon-editor.spec.js b/tests/unit/mavon-editor.spec.js new file mode 100644 index 000000000..ac63b40cd --- /dev/null +++ b/tests/unit/mavon-editor.spec.js @@ -0,0 +1,23 @@ +import { mount } from '@vue/test-utils' +import MavonEditor from '@/mavon-editor.vue' +import autoTextarea from 'auto-textarea/auto-textarea.vue' + +/*eslint-disable */ +const factory = (propsData) => { + return mount(MavonEditor, { + propsData: { + ...propsData + }, + stubs: { + "v-autoTextarea": autoTextarea + } + }) +} + +describe('snapshot', () => { + it('snapshot', () => { + const wrapper = new factory() + expect(wrapper.html()).toMatchSnapshot() + }) +}) +