diff --git a/.eslintrc.js b/.eslintrc.js index 261acb0..a5c7072 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -14,15 +14,6 @@ module.exports = { // add your custom rules here //it is base on https://github.com/vuejs/eslint-config-vue rules: { - "vue/html-self-closing": ["error", { - "html": { - "void": "always", - "normal": "always", - "component": "always" - }, - "svg": "always", - "math": "always" - }], "vue/max-attributes-per-line": [2, { "singleline": 10, "multiline": { @@ -56,8 +47,7 @@ module.exports = { 'curly': [2, 'multi-line'], 'dot-location': [2, 'property'], 'eol-last': 2, - // 'eqeqeq': ["error", "always", { "null": "ignore" }], - 'eqeqeq': 'off', + 'eqeqeq': ["error", "always", { "null": "ignore" }], 'generator-star-spacing': [2, { 'before': true, 'after': true @@ -172,8 +162,11 @@ module.exports = { } }], 'padded-blocks': [2, 'never'], - 'quotes': [1, 'single'], - 'semi': [0, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], 'semi-spacing': [2, { 'before': false, 'after': true diff --git a/package.json b/package.json index ca319bf..93887ee 100644 --- a/package.json +++ b/package.json @@ -2,14 +2,11 @@ "name": "vue-admin-template", "version": "4.4.0", "description": "A vue admin template with Element UI & axios & vite & permission control & lint", - "author": "Xydawn ", "scripts": { "dev": "vite", "build": "vite build", "preview": "vite preview", - "lint": "eslint --ext .js,.vue src", - "test:unit": "jest --clearCache && vue-cli-service test:unit", - "test:ci": "npm run lint && npm run test:unit" + "lint": "eslint --ext .js,.vue src" }, "dependencies": { "axios": "^0.21.1", diff --git a/src/icons/index.js b/src/icons/index.js index 4818de6..cd4f637 100644 --- a/src/icons/index.js +++ b/src/icons/index.js @@ -3,5 +3,3 @@ import SvgIcon from '@/components/SvgIcon'; // svg component // register globally Vue.component('svg-icon', SvgIcon); - -const req = import.meta.globEager('./svg/*.svg'); // vite diff --git a/tests/unit/.eslintrc.js b/tests/unit/.eslintrc.js deleted file mode 100644 index 958d51b..0000000 --- a/tests/unit/.eslintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - env: { - jest: true - } -} diff --git a/tests/unit/components/Breadcrumb.spec.js b/tests/unit/components/Breadcrumb.spec.js deleted file mode 100644 index 1d94c8f..0000000 --- a/tests/unit/components/Breadcrumb.spec.js +++ /dev/null @@ -1,98 +0,0 @@ -import { mount, createLocalVue } from '@vue/test-utils' -import VueRouter from 'vue-router' -import ElementUI from 'element-ui' -import Breadcrumb from '@/components/Breadcrumb/index.vue' - -const localVue = createLocalVue() -localVue.use(VueRouter) -localVue.use(ElementUI) - -const routes = [ - { - path: '/', - name: 'home', - children: [{ - path: 'dashboard', - name: 'dashboard' - }] - }, - { - path: '/menu', - name: 'menu', - children: [{ - path: 'menu1', - name: 'menu1', - meta: { title: 'menu1' }, - children: [{ - path: 'menu1-1', - name: 'menu1-1', - meta: { title: 'menu1-1' } - }, - { - path: 'menu1-2', - name: 'menu1-2', - redirect: 'noredirect', - meta: { title: 'menu1-2' }, - children: [{ - path: 'menu1-2-1', - name: 'menu1-2-1', - meta: { title: 'menu1-2-1' } - }, - { - path: 'menu1-2-2', - name: 'menu1-2-2' - }] - }] - }] - }] - -const router = new VueRouter({ - routes -}) - -describe('Breadcrumb.vue', () => { - const wrapper = mount(Breadcrumb, { - localVue, - router - }) - it('dashboard', () => { - router.push('/dashboard') - const len = wrapper.findAll('.el-breadcrumb__inner').length - expect(len).toBe(1) - }) - it('normal route', () => { - router.push('/menu/menu1') - const len = wrapper.findAll('.el-breadcrumb__inner').length - expect(len).toBe(2) - }) - it('nested route', () => { - router.push('/menu/menu1/menu1-2/menu1-2-1') - const len = wrapper.findAll('.el-breadcrumb__inner').length - expect(len).toBe(4) - }) - it('no meta.title', () => { - router.push('/menu/menu1/menu1-2/menu1-2-2') - const len = wrapper.findAll('.el-breadcrumb__inner').length - expect(len).toBe(3) - }) - // it('click link', () => { - // router.push('/menu/menu1/menu1-2/menu1-2-2') - // const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') - // const second = breadcrumbArray.at(1) - // console.log(breadcrumbArray) - // const href = second.find('a').attributes().href - // expect(href).toBe('#/menu/menu1') - // }) - // it('noRedirect', () => { - // router.push('/menu/menu1/menu1-2/menu1-2-1') - // const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') - // const redirectBreadcrumb = breadcrumbArray.at(2) - // expect(redirectBreadcrumb.contains('a')).toBe(false) - // }) - it('last breadcrumb', () => { - router.push('/menu/menu1/menu1-2/menu1-2-1') - const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') - const redirectBreadcrumb = breadcrumbArray.at(3) - expect(redirectBreadcrumb.contains('a')).toBe(false) - }) -}) diff --git a/tests/unit/components/Hamburger.spec.js b/tests/unit/components/Hamburger.spec.js deleted file mode 100644 index 01ea303..0000000 --- a/tests/unit/components/Hamburger.spec.js +++ /dev/null @@ -1,18 +0,0 @@ -import { shallowMount } from '@vue/test-utils' -import Hamburger from '@/components/Hamburger/index.vue' -describe('Hamburger.vue', () => { - it('toggle click', () => { - const wrapper = shallowMount(Hamburger) - const mockFn = jest.fn() - wrapper.vm.$on('toggleClick', mockFn) - wrapper.find('.hamburger').trigger('click') - expect(mockFn).toBeCalled() - }) - it('prop isActive', () => { - const wrapper = shallowMount(Hamburger) - wrapper.setProps({ isActive: true }) - expect(wrapper.contains('.is-active')).toBe(true) - wrapper.setProps({ isActive: false }) - expect(wrapper.contains('.is-active')).toBe(false) - }) -}) diff --git a/tests/unit/components/SvgIcon.spec.js b/tests/unit/components/SvgIcon.spec.js deleted file mode 100644 index 31467a9..0000000 --- a/tests/unit/components/SvgIcon.spec.js +++ /dev/null @@ -1,22 +0,0 @@ -import { shallowMount } from '@vue/test-utils' -import SvgIcon from '@/components/SvgIcon/index.vue' -describe('SvgIcon.vue', () => { - it('iconClass', () => { - const wrapper = shallowMount(SvgIcon, { - propsData: { - iconClass: 'test' - } - }) - expect(wrapper.find('use').attributes().href).toBe('#icon-test') - }) - it('className', () => { - const wrapper = shallowMount(SvgIcon, { - propsData: { - iconClass: 'test' - } - }) - expect(wrapper.classes().length).toBe(1) - wrapper.setProps({ className: 'test' }) - expect(wrapper.classes().includes('test')).toBe(true) - }) -}) diff --git a/tests/unit/utils/formatTime.spec.js b/tests/unit/utils/formatTime.spec.js deleted file mode 100644 index 24e165b..0000000 --- a/tests/unit/utils/formatTime.spec.js +++ /dev/null @@ -1,30 +0,0 @@ -import { formatTime } from '@/utils/index.js' - -describe('Utils:formatTime', () => { - const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" - const retrofit = 5 * 1000 - - it('ten digits timestamp', () => { - expect(formatTime((d / 1000).toFixed(0))).toBe('7月13日17时54分') - }) - it('test now', () => { - expect(formatTime(+new Date() - 1)).toBe('刚刚') - }) - it('less two minute', () => { - expect(formatTime(+new Date() - 60 * 2 * 1000 + retrofit)).toBe('2分钟前') - }) - it('less two hour', () => { - expect(formatTime(+new Date() - 60 * 60 * 2 * 1000 + retrofit)).toBe('2小时前') - }) - it('less one day', () => { - expect(formatTime(+new Date() - 60 * 60 * 24 * 1 * 1000)).toBe('1天前') - }) - it('more than one day', () => { - expect(formatTime(d)).toBe('7月13日17时54分') - }) - it('format', () => { - expect(formatTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') - expect(formatTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') - expect(formatTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') - }) -}) diff --git a/tests/unit/utils/param2Obj.spec.js b/tests/unit/utils/param2Obj.spec.js deleted file mode 100644 index e106ed8..0000000 --- a/tests/unit/utils/param2Obj.spec.js +++ /dev/null @@ -1,14 +0,0 @@ -import { param2Obj } from '@/utils/index.js' -describe('Utils:param2Obj', () => { - const url = 'https://github.com/PanJiaChen/vue-element-admin?name=bill&age=29&sex=1&field=dGVzdA==&key=%E6%B5%8B%E8%AF%95' - - it('param2Obj test', () => { - expect(param2Obj(url)).toEqual({ - name: 'bill', - age: '29', - sex: '1', - field: window.btoa('test'), - key: '测试' - }) - }) -}) diff --git a/tests/unit/utils/parseTime.spec.js b/tests/unit/utils/parseTime.spec.js deleted file mode 100644 index 56045af..0000000 --- a/tests/unit/utils/parseTime.spec.js +++ /dev/null @@ -1,35 +0,0 @@ -import { parseTime } from '@/utils/index.js' - -describe('Utils:parseTime', () => { - const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" - it('timestamp', () => { - expect(parseTime(d)).toBe('2018-07-13 17:54:01') - }) - it('timestamp string', () => { - expect(parseTime((d + ''))).toBe('2018-07-13 17:54:01') - }) - it('ten digits timestamp', () => { - expect(parseTime((d / 1000).toFixed(0))).toBe('2018-07-13 17:54:01') - }) - it('new Date', () => { - expect(parseTime(new Date(d))).toBe('2018-07-13 17:54:01') - }) - it('format', () => { - expect(parseTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') - expect(parseTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') - expect(parseTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') - }) - it('get the day of the week', () => { - expect(parseTime(d, '{a}')).toBe('五') // 星期五 - }) - it('get the day of the week', () => { - expect(parseTime(+d + 1000 * 60 * 60 * 24 * 2, '{a}')).toBe('日') // 星期日 - }) - it('empty argument', () => { - expect(parseTime()).toBeNull() - }) - - it('null', () => { - expect(parseTime(null)).toBeNull() - }) -}) diff --git a/tests/unit/utils/validate.spec.js b/tests/unit/utils/validate.spec.js deleted file mode 100644 index f774905..0000000 --- a/tests/unit/utils/validate.spec.js +++ /dev/null @@ -1,17 +0,0 @@ -import { validUsername, isExternal } from '@/utils/validate.js' - -describe('Utils:validate', () => { - it('validUsername', () => { - expect(validUsername('admin')).toBe(true) - expect(validUsername('editor')).toBe(true) - expect(validUsername('xxxx')).toBe(false) - }) - it('isExternal', () => { - expect(isExternal('https://github.com/PanJiaChen/vue-element-admin')).toBe(true) - expect(isExternal('http://github.com/PanJiaChen/vue-element-admin')).toBe(true) - expect(isExternal('github.com/PanJiaChen/vue-element-admin')).toBe(false) - expect(isExternal('/dashboard')).toBe(false) - expect(isExternal('./dashboard')).toBe(false) - expect(isExternal('dashboard')).toBe(false) - }) -})