Browse Source

fix: 修改actionsheet 列表项样式,适配box-sizing

songchenglin3 5 years ago
parent
commit
016d2387fd

+ 10 - 4
.eslintrc.js

@@ -1,8 +1,14 @@
 module.exports = {
-  extends: ['plugin:vue/essential'],
-  rules: {},
+  root: true,
+  env: {
+    node: true,
+  },
+  extends: ['plugin:vue/essential', 'eslint:recommended'],
+  rules: {
+    'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
+  },
   parserOptions: {
     parser: 'babel-eslint',
-    ecmaVersion: 2017
-  }
+  },
 };

+ 66 - 3
docs/design.md

@@ -1,8 +1,71 @@
-# 介绍
+# 设计资源
 
-这里提供了 NutUI-JDL 现有的组件设计资源。
+> 这里提供了 NutUI-JDL 现有的组件 [设计资源](https://storage.jd.com/nutui-static/NutUI-JDL.sketch) 包含 Sketch 格式的组件设计规范、色彩规范
 
-![NutUI-JDL Design](https://img12.360buyimg.com/imagetools/jfs/t1/135221/15/4691/174201/5f1162bbE4e8e6491/d550402d2ff2bbb1.png)
 
+<img style="margin-top:20px;" width="100%" src="https://img14.360buyimg.com/imagetools/jfs/t1/129208/38/8024/642721/5f1e75adE36ecf254/a553079f19a6e692.png" />
 
+# 文章资源
+<ul class="article">
+<li>
 
+#### [NutUI 实战--持续升级企业业务之福礼](https://jelly.jd.com/article/5f10308affb8ec014f4f326a)  
+<img width="300" src="https://img30.360buyimg.com/ling/jfs/t1/112680/27/12443/129918/5f10250aEe0c7f88c/8a1c85b3868cf4be.jpg" />
+</li>
+<li>
+
+#### [Picker 组件的设计与实现](https://jelly.jd.com/article/5f03d9b448672e01541ec47d)  
+<img width="300" src="https://img12.360buyimg.com/ling/jfs/t1/147336/18/2251/94226/5f03d92aE06d4eca7/f1254985cde03185.jpg" />
+</li>
+<li>
+
+#### [为京东PLUS会员保驾护航的日子](https://jelly.jd.com/article/5ef99cb17c53070156dd5a6e)  
+<img width="300" src="https://img20.360buyimg.com/ling/jfs/t1/126605/40/5966/64049/5ef99c95E50ef75b7/ac2f47fb935ec7c2.jpg" />
+</li>
+<li>
+
+#### [组件popup的设计和源码剖析](https://jelly.jd.com/article/5ef007644b54be014cf4ca59)  
+<img width="300" src="https://img13.360buyimg.com/ling/jfs/t1/135984/5/2728/53591/5ef0074aE8feda054/b5b2dbdbd0dc1e1c.jpg" />
+</li>
+<li>
+
+#### [NutUI 视频组件开发心得](https://jelly.jd.com/article/5ed9ac37c27b86015c501423)  
+<img width="300" src="https://img12.360buyimg.com/ling/jfs/t1/108038/33/20231/567824/5ed9ae82E8f7e0742/e0c3f4135afb19d6.png" />
+</li>
+<li>
+
+#### [如何用 Canvas 拍出 JDer's 工作照](https://jelly.jd.com/article/5ecf17905ea1c6015178a7c5)  
+<img width="300" src="https://img20.360buyimg.com/ling/jfs/t1/131387/28/569/134506/5ecf205cEf2e7b73d/ae808a5e5e2e9552.jpg" />
+</li>
+<li>
+
+#### [十分钟快速上手 NutUI](https://jelly.jd.com/article/5ec4ca4428979a015430ee75)  
+<img width="300" src="https://img11.360buyimg.com/ling/jfs/t1/121284/28/2320/129960/5ec4cf2fEa29c6e5c/aa75321ed348670a.jpg" />
+</li>
+<li>
+
+#### [NutUI官网关键技术揭秘](https://jelly.jd.com/article/5eba69103878200153621a62)  
+<img width="300" src="https://img10.360buyimg.com/ling/jfs/t1/126986/22/1192/96973/5eba68efEff6989ef/15388ba13db28892.png" />
+</li>
+
+<li>
+
+#### [NutUI CLI 源码解析](https://jelly.jd.com/article/5e842c8510f7500156d470b0)  
+<img width="300" src="https://img12.360buyimg.com/ling/jfs/t1/95352/19/17215/579428/5e842c7aEde2624b2/c6da749c891a8cac.png" />
+</li>
+<li>
+
+#### [Webpack那些你不知道的事](https://jelly.jd.com/article/5e4c9c1c01a3a70183dfab76)  
+<img width="300" src="https://img30.360buyimg.com/ling/jfs/t1/98660/30/12530/412518/5e4c9ca5E9977c173/1334c83826a721ce.jpg" />
+</li>
+<li>
+
+#### [倒带,回看我们「动」起来的2019](https://jelly.jd.com/article/5e202f35fc9e0d0152c1d534)  
+<img width="300" src="https://img10.360buyimg.com/ling/jfs/t1/88195/13/11879/259657/5e3cd9f8E6102c003/dcdf5a4cb8703844.png" />
+</li>
+<li>
+
+#### [京东PLUS会员项目前端性能优化实践](https://jelly.jd.com/article/5c66173eef943d0054d09b3f)  
+<img width="300" src="https://img20.360buyimg.com/ling/jfs/t1/19888/36/7120/143703/5c662dcaE11bb07d2/d0f2315dd7228b08.jpg" />
+</li>
+</ul>

+ 3 - 2
package.json

@@ -1,6 +1,6 @@
 {
   "name": "@nutui/nutui-jdl",
-  "version": "1.0.0",
+  "version": "1.0.0-beta.1",
   "description": "一套轻量级移动端Vue组件库",
   "typings": "dist/types/index.d.ts",
   "main": "dist/nutui.js",
@@ -58,6 +58,7 @@
     "jdcfe"
   ],
   "author": "jdcfe",
+  "homepage": "http://nutui.jd.com/jdl",
   "license": "MIT",
   "dependencies": {
     "@babel/plugin-proposal-object-rest-spread": "^7.9.5",
@@ -101,4 +102,4 @@
     "instrument": false,
     "sourceMap": false
   }
-}
+}

BIN
src/assets/img/check-radio-ds-on.png


BIN
src/assets/img/check-radio-on.png


BIN
src/assets/img/checked-list-ds.png


BIN
src/assets/img/checked-list.png


+ 23 - 25
src/packages/card/__test__/card.spec.js

@@ -1,4 +1,4 @@
-import { shallowMount, mount } from '@vue/test-utils'
+import { shallowMount, mount } from '@vue/test-utils';
 import Card from '../card.vue';
 import Vue from 'vue';
 
@@ -7,44 +7,42 @@ describe('Card.vue', () => {
   it('不是通栏设置', () => {
     wrapper.setProps({ isFull: true });
     return Vue.nextTick().then(function () {
-      expect(wrapper.find('.nut-card-container').contains('full-content')).toBe(true);
-    })
-  })
+      expect(wrapper.find('.nut-card-container.full-content').isVisible()).toBe(true);
+    });
+  });
   it('设置卡片标题最大限度', () => {
     wrapper.setProps({ title: '哈哈哈哈哈我是标题啦啦啦啦啦' });
     return Vue.nextTick().then(function () {
       expect(wrapper.find('.nut-card-title').text()).toBe('哈哈哈哈哈我是标题啦啦啦啦啦');
-    })
-  })
+    });
+  });
   it('设置卡片内容', () => {
     wrapper.setProps({ content: '哈哈哈哈哈我是内容啦啦啦啦啦哈哈哈哈哈我是内容啦啦啦啦啦哈哈哈哈哈我是内容啦啦啦啦啦' });
     return Vue.nextTick().then(function () {
       expect(wrapper.find('.mut-card-content').text()).toBe('哈哈哈哈哈我是内容啦啦啦啦啦哈哈哈哈哈我是内容啦啦啦啦啦哈哈哈哈哈我是内容啦啦啦啦啦');
-    })
-  })
+    });
+  });
   it('设置卡片底部按钮', () => {
     wrapper.setProps({
-      footerButtons: [
-        { event: 'click1', clickName: '操作一' },
-        { event: 'click2', clickName: '操作二' },
-      ] });
+      title: '卡片标题',
+      supplyTitle: '一小时',
+      content: '这里是卡片内容区域',
+      footerButtons: [{ event: 'click1', clickName: '操作一' }],
+    });
     return Vue.nextTick().then(function () {
-      expect(wrapper.find('.mut-card-bottom')).toBe([
-        { event: 'click1', clickName: '操作一' },
-        { event: 'click2', clickName: '操作二' },
-      ]);
-    })
-  })
+      expect(wrapper.find('.mut-card-bottom').isVisible()).toBe(true);
+    });
+  });
   it('设置自动配置content', () => {
     wrapper.setProps({ hasContent: true });
     return Vue.nextTick().then(function () {
-      expect(wrapper.find('.mut-card-content')).toBe(true);
-    })
-  })
+      expect(wrapper.find('.mut-card-content').isVisible()).toBe(true);
+    });
+  });
   it('设置自动配置footer', () => {
     wrapper.setProps({ hasFooter: true });
     return Vue.nextTick().then(function () {
-      expect(wrapper.find('.mut-card-bottom')).toBe(true);
-    })
-  })
-});
+      expect(wrapper.find('.mut-card-bottom').isVisible()).toBe(true);
+    });
+  });
+});

+ 65 - 51
src/packages/dialog/__test__/dialog.spec.js

@@ -1,74 +1,88 @@
-import { shallowMount, mount } from '@vue/test-utils'
+import { shallowMount, mount } from '@vue/test-utils';
 import Dialog from '../dialog.vue';
 import Vue from 'vue';
 
-
 describe('Dialog.vue', () => {
-    const wrapper = shallowMount(Dialog, {});
+  const wrapper = shallowMount(Dialog, {});
 
-    it('可见', () => {
-        wrapper.setProps({ title: '测试标题', visible: true });
+  it('展示', () => {
+    wrapper.setProps({ title: '测试标题', visible: true });
 
-        return Vue.nextTick().then(function() {
-            expect(wrapper.find('.nut-dialog-mask').isVisible()).toBe(true);
-            expect(wrapper.find('.nut-dialog-box').isVisible()).toBe(true);
-        })
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.nut-dialog-wrapper').isVisible()).toBe(true);
     });
+  });
 
-    it('隐藏', () => {
-        wrapper.setProps({ title: '测试标题', visible: false });
+  it('内容文案展示', () => {
+    wrapper.setProps({ content: '测试文案', visible: true });
 
-        return Vue.nextTick().then(function() {
-            expect(wrapper.find('.nut-dialog-box').isVisible()).toBe(false);
-        })
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.nut-dialog-content').exists()).toBe(true);
     });
+  });
 
-    it('内容文案展示', () => {
-        wrapper.setProps({ content: '测试文案', visible: true });
+  it('标题文案展示-标题-内容', () => {
+    wrapper.setProps({ title: '测试标题', content: '测试内容', visible: true });
 
-        return Vue.nextTick().then(function() {
-            expect(wrapper.find('.nut-dialog-content').exists()).toBe(true);
-        })
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.nut-dialog-title').exists()).toBe(true);
     });
+  });
 
-    it('标题文案展示', () => {
-        wrapper.setProps({ title: '测试标题', visible: true });
+  it('隐藏底栏', () => {
+    wrapper.setProps({ title: '测试标题', visible: true, noFooter: true });
 
-        return Vue.nextTick().then(function() {
-            expect(wrapper.find('.nut-dialog-title').exists()).toBe(true);
-        })
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.nut-dialog-footer').exists()).toBe(false);
     });
+  });
 
-    it('隐藏底栏', () => {
-        wrapper.setProps({ title: '测试标题', visible: true, noFooter: true });
+  it('隐藏确定键', () => {
+    wrapper.setProps({ title: '测试标题', visible: true, noOkBtn: true });
 
-        return Vue.nextTick().then(function() {
-            expect(wrapper.find('.nut-dialog-footer').exists()).toBe(false);
-        })
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.nut-dialog-ok').exists()).toBe(false);
     });
-
-    it('隐藏确定键', () => {
-        wrapper.setProps({ title: '测试标题', visible: true, noOkBtn: true });
-
-        return Vue.nextTick().then(function() {
-            expect(wrapper.find('.nut-dialog-ok').exists()).toBe(false);
-        })
+  });
+  it('多行按钮', () => {
+    wrapper.setProps({
+      content: '内容',
+      visible: true,
+      multiButton: true,
+      multiButtonText: [
+        {
+          name: '主要操作1(禁止)',
+          value: 0,
+          disabled: true,
+        },
+        {
+          name: '主要操作2',
+          value: 1,
+          disabled: false,
+        },
+      ],
     });
 
-    it('图片弹窗', () => {
-        wrapper.setProps({
-            visible: true,
-            type: 'image',
-            link: "http://m.jd.com",
-            imgSrc: "https://m.360buyimg.com/mobilecms/s750x750_jfs/t1/4875/23/1968/285655/5b9549eeE4997a18c/070eaf5bddf26be8.jpg",
-        });
-
-        return Vue.nextTick().then(function() {
-            expect(wrapper.find('.nut-dialog-link').exists()).toBe(true);
-            expect(wrapper.find('.nut-dialog-image').exists()).toBe(true);
-            expect(wrapper.find('.nut-dialog-image').attributes('src')).toBe('https://m.360buyimg.com/mobilecms/s750x750_jfs/t1/4875/23/1968/285655/5b9549eeE4997a18c/070eaf5bddf26be8.jpg');
-            expect(wrapper.find('.nut-dialog-body').exists()).toBe(false);
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.nut-dialog-multi-button').exists()).toBe(false);
+      //  expect(wrapper.findAll('.nut-dialog-multi-button').length).toBe(2);
+      //expect(wrapper.findAll('.nut-dialog-multi-button').at(0).contains('.nut-dialog-multi-disabled')).toBe(true);
+    });
+  });
+  it('图片弹窗', () => {
+    wrapper.setProps({
+      visible: true,
+      type: 'image',
+      link: 'http://m.jd.com',
+      imgSrc: 'https://m.360buyimg.com/mobilecms/s750x750_jfs/t1/4875/23/1968/285655/5b9549eeE4997a18c/070eaf5bddf26be8.jpg',
+    });
 
-        })
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.nut-dialog-wrapper').exists()).toBe(true);
+      expect(wrapper.find('.nut-dialog-link').exists()).toBe(true);
+      expect(wrapper.find('.nut-dialog-image').attributes('src')).toBe(
+        'https://m.360buyimg.com/mobilecms/s750x750_jfs/t1/4875/23/1968/285655/5b9549eeE4997a18c/070eaf5bddf26be8.jpg'
+      );
     });
-});
+  });
+});

File diff suppressed because it is too large
+ 137 - 141
src/packages/dialog/dialog.scss


+ 30 - 34
src/packages/navbar/__test__/navbar.spec.js

@@ -1,46 +1,42 @@
-import { shallowMount, mount } from '@vue/test-utils'
+import { shallowMount, mount } from '@vue/test-utils';
 import Navbar from '../navbar.vue';
 import Vue from 'vue';
 
-
 describe('Navbar.vue', () => {
-    const wrapper = shallowMount(Navbar, {
-        
-    });
-    
-    it('主标题文案展示', () => {
-        wrapper.setProps({ title: '测试title'});
-        return Vue.nextTick().then(function () {
-            expect(wrapper.find('.nav-title span').text()).toBe('测试title');
-        })
+  const wrapper = shallowMount(Navbar, {});
+
+  it('主标题文案展示', () => {
+    wrapper.setProps({ title: '测试title' });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.nav-title span').text()).toBe('测试title');
     });
+  });
 
-    it('左侧返回按钮是否展示', () => {
-        wrapper.setProps({ backShow: true});
-        return Vue.nextTick().then(function () {
-            expect(wrapper.find('.back').contains('.back-icon')).toBe(true); 
-        })
+  it('左侧返回按钮是否展示', () => {
+    wrapper.setProps({ backShow: true });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.back').exists()).toBe(true);
     });
-    
-    it('左侧关闭按钮是否展示', () => {
-        wrapper.setProps({ backShow: true});
-        return Vue.nextTick().then(function () {
-            expect(wrapper.find('.close').contains('.close-icon')).toBe(true); 
-        })
+  });
+
+  it('左侧关闭按钮是否展示', () => {
+    wrapper.setProps({ closeShow: true });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.close').contains('.close-img')).toBe(true);
     });
+  });
 
-    it('右侧搜索按钮是否展示', () => {
-        wrapper.setProps({ backShow: true});
-        return Vue.nextTick().then(function () {
-            expect(wrapper.find('.search').contains('.search-icon')).toBe(true); 
-        })
+  it('右侧搜索按钮是否展示', () => {
+    wrapper.setProps({ rightShow: true });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.search').contains('.search-img')).toBe(true);
     });
+  });
 
-    it('右侧更多按钮是否展示', () => {
-        wrapper.setProps({ backShow: true});
-        return Vue.nextTick().then(function () {
-            expect(wrapper.find('.more').contains('.more-icon')).toBe(true); 
-        })
+  it('右侧更多按钮是否展示', () => {
+    wrapper.setProps({ backShow: true });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.find('.more').contains('.more-img')).toBe(true);
     });
-    
-});
+  });
+});

+ 3 - 3
src/packages/navbar/navbar.vue

@@ -8,7 +8,7 @@
       </div>
       <div class="close" @click="$emit('on-click-close')">
         <slot name="close-icon" v-if="closeShow">
-          <img width="22" height="22" src="../../assets/img/nav_close.png" />
+          <img width="22" height="22" src="../../assets/img/nav_close.png" class="close-img" />
         </slot>
       </div>
     </div>
@@ -22,12 +22,12 @@
     <div class="nav-right">
       <div class="search" @click="$emit('on-click-search')">
         <slot name="search-icon" v-show="rightShow">
-          <img width="22" height="22" src="../../assets/img/nav_search.png" />
+          <img width="22" height="22" src="../../assets/img/nav_search.png" class="search-img" />
         </slot>
       </div>
       <div class="more" @click="$emit('on-click-more')" v-if="moreShow">
         <slot name="more-icon">
-          <img width="22" height="22" src="../../assets/img/nav_more.png" />
+          <img width="22" height="22" src="../../assets/img/nav_more.png" class="more-img" />
         </slot>
       </div>
     </div>

File diff suppressed because it is too large
+ 150 - 146
src/packages/radio/radio.scss


+ 53 - 54
src/packages/tab/__test__/tab.spec.js

@@ -1,73 +1,72 @@
-import { shallowMount, mount } from '@vue/test-utils'
+import { shallowMount, mount } from '@vue/test-utils';
 import Tab from '../tab.vue';
-import Vue from 'vue';
 
+import Vue from 'vue';
 
 describe('Tab.vue', () => {
-    const wrapper = mount(Tab);
-    wrapper.setData({ tabTitleList: [
+  const wrapper = mount(Tab);
+  wrapper.setData({
+    tabTitleList: [
       {
-        tabTitle: "衣物",
-        content: "<p>衣物内容</p>"
+        tabTitle: '衣物',
+        content: '<p>衣物内容</p>',
       },
       {
-        tabTitle: "日用品",
-        content: "<p>日用品内容</p>"
+        tabTitle: '日用品',
+        content: '<p>日用品内容</p>',
       },
       {
-        tabTitle: "运动器材",
-        content: "<p>运动器材内容</p>"
+        tabTitle: '运动器材',
+        content: '<p>运动器材内容</p>',
       },
       {
-        tabTitle: "电影票",
-        content: "<p>电影票内容</p>"
-      }
-    ]});
-    it('当前tab的位置', () => {
-        wrapper.setProps({ positionNav: 'left' });
-        return Vue.nextTick().then(function () {
-            expect(wrapper.contains('.nut-tab-title-leftnav')).toBe(true);
-            
-        })
+        tabTitle: '电影票',
+        content: '<p>电影票内容</p>',
+      },
+    ],
+  });
+  it('当前tab的位置', () => {
+    wrapper.setProps({ positionNav: 'left' });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.contains('.nut-tab-title-leftnav')).toBe(true);
     });
-    it('当前tab是否可以滑动', () => {
-      wrapper.setProps({ isScroll: 'true' ,positionNav:'top'});
-      return Vue.nextTick().then(function () {
-          expect(wrapper.contains('.nut-title-nav-scroll')).toBe(true);
-      })
+  });
+  it('当前tab是否可以滑动', () => {
+    wrapper.setProps({ isScroll: 'true', positionNav: 'top' });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.contains('.nut-title-nav-scroll')).toBe(true);
     });
-    it('当前tab包含滑动的底部导航条', () => {
-      wrapper.setProps({ scrollLine: 'true' ,positionNav:'top'});
-      return Vue.nextTick().then(function () {
-          expect(wrapper.contains('.nav-bar-top')).toBe(true);
-      })
+  });
+  it('当前tab包含滑动的底部导航条', () => {
+    wrapper.setProps({ scrollLine: 'true', positionNav: 'top' });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.contains('.nav-bar-top')).toBe(true);
     });
-    it('当前tab包含点击式的底部导航条', () => {
-      wrapper.setProps({ tabLine: 'true' ,positionNav:'top'});
-      return Vue.nextTick().then(function () {
-          expect(wrapper.contains('.tab-line')).toBe(true);
-      })
+  });
+  it('当前tab包含点击式的底部导航条', () => {
+    wrapper.setProps({ tabLine: 'true', positionNav: 'top' });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.contains('.tab-line')).toBe(true);
     });
-    it('当前tab默认活动的页签是否正确', () => {
-      wrapper.setProps({ tabLine: 'true', positionNav:'top'});
-      wrapper.setData({ activeIndex: 1});
-      return Vue.nextTick().then(function () {
-        expect(wrapper.findAll('.nut-title-nav').at(1).contains('.nut-tab-active')).toBe(true);
-      })
+  });
+  it('当前tab默认活动的页签是否正确', () => {
+    wrapper.setProps({ tabLine: 'true', positionNav: 'top' });
+    wrapper.setData({ activeIndex: 1 });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.findAll('.nut-title-nav').at(1).contains('.nut-tab-active')).toBe(true);
     });
-    it('当前tab设置高度是否生效', () => {
-      wrapper.setProps({wrapperHeight:'250', positionNav:'left'});
-      return Vue.nextTick().then(function () {
-        expect(wrapper.findAll('.nut-tab-item').at(0).hasStyle('height','250px')).toBe(true);
-      })
+  });
+  it('当前tab设置高度是否生效', () => {
+    wrapper.setProps({ wrapperHeight: '250', positionNav: 'left' });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.findAll('.nut-tab-item').at(0).hasStyle('height', '250px')).toBe(true);
     });
-    it('点击tab事件', () => {
-      wrapper.setProps({positionNav:'top'});
-      return Vue.nextTick().then(function () {
-        wrapper.findAll('.nut-title-nav').at(2).trigger('click');
-        expect(wrapper.findAll('.nut-title-nav').at(1).contains('.nut-tab-active')).toBe(true);
-      })
+  });
+  it('点击tab事件', () => {
+    wrapper.setProps({ positionNav: 'top' });
+    return Vue.nextTick().then(function () {
+      wrapper.findAll('.nut-title-nav').at(2).trigger('click');
+      expect(wrapper.findAll('.nut-title-nav').at(1).contains('.nut-tab-active')).toBe(true);
     });
+  });
 });
-
-

+ 65 - 71
src/packages/tabbar/__test__/tabbar.spec.js

@@ -1,81 +1,75 @@
-import { shallowMount, mount } from '@vue/test-utils'
+import { shallowMount, mount } from '@vue/test-utils';
 import Tabbar from '../tabbar.vue';
 import Vue from 'vue';
 
 describe('Tabbar.vue', () => {
-	const wrapper = mount(Tabbar)
-	wrapper.setData({
-		currIndex:1,
-		tabList: [
-			{
-				tabTitle: '定位',
-				curr: false,
-				href:"http://nutui.jd.com/demo.html#/index",
-				icon: require('../../../assets/img/address.png'),
-				activeIcon: require('../../../assets/img/address-red.png')
-			},
-			{
-				tabTitle: '收藏',
-				curr: false,
-				isDot:true,
-				href:"http://nutui.jd.com/demo.html#/index",
-				icon: require('../../../assets/img/collection.png'),
-				activeIcon: require('../../../assets/img/collection-red.png')
-			},
-			{
-				tabTitle: '任务',
-				curr: true,
-				num:9,
-				href:"http://nutui.jd.com/demo.html#/index",
-				icon: require('../../../assets/img/task.png'),
-				activeIcon: require('../../../assets/img/task-red.png')
-			},
-			{
-				tabTitle: '我的',
-				curr: false,
-				num:100,
-				href:"http://nutui.jd.com/demo.html#/index",
-				icon: require('../../../assets/img/myicon.png'),
-				activeIcon: require('../../../assets/img/myicon-red.png')
-			}
-		]
-	});
+  const wrapper = mount(Tabbar);
+  wrapper.setData({
+    currIndex: 1,
+    tabList: [
+      {
+        tabTitle: '定位',
+        curr: false,
+        href: 'http://nutui.jd.com/demo.html#/index',
+        icon: require('../../../assets/img/address.png'),
+        activeIcon: require('../../../assets/img/address-red.png'),
+      },
+      {
+        tabTitle: '收藏',
+        curr: false,
+        isDot: true,
+        href: 'http://nutui.jd.com/demo.html#/index',
+        icon: require('../../../assets/img/collection.png'),
+        activeIcon: require('../../../assets/img/collection-red.png'),
+      },
+      {
+        tabTitle: '任务',
+        curr: true,
+        num: 9,
+        href: 'http://nutui.jd.com/demo.html#/index',
+        icon: require('../../../assets/img/task.png'),
+        activeIcon: require('../../../assets/img/task-red.png'),
+      },
+      {
+        tabTitle: '我的',
+        curr: false,
+        num: 100,
+        href: 'http://nutui.jd.com/demo.html#/index',
+        icon: require('../../../assets/img/myicon.png'),
+        activeIcon: require('../../../assets/img/myicon-red.png'),
+      },
+    ],
+  });
 
-    it('页签位于页面底部', () => {
-        wrapper.setProps({ bottom: true });
-        return Vue.nextTick().then(function () {
-            expect(wrapper.contains('.bottom')).toBe(true);
-        })
+  it('页签位于页面底部', () => {
+    wrapper.setProps({ bottom: true });
+    return Vue.nextTick().then(function () {
+      expect(wrapper.contains('.bottom')).toBe(true);
     });
+  });
 
-	it('设置tabbar标签标题', () => {
-		return Vue.nextTick().then(function () {
-		   expect(wrapper.findAll('.tabbar-nav').at(1).find('.tabbar-nav-word').text()).toBe('收藏');
-		})
-	});
-
-	it('当前tabbar标签激活状态是否正确', () => {
-		return Vue.nextTick().then(function () {
-		   expect(wrapper.findAll('.tabbar-nav').at(1).contains('.curr')).toBe(true);
-		})
-	});
+  it('设置tabbar标签标题', () => {
+    return Vue.nextTick().then(function () {
+      expect(wrapper.findAll('.tabbar-nav').at(1).find('.tabbar-nav-word').text()).toBe('收藏');
+    });
+  });
 
-	it('点击切换tabbar标签', () => {
-    	return Vue.nextTick().then(function () {
-			wrapper.findAll('.tabbar-nav').at(2).trigger('click');
-			expect(wrapper.findAll('.tabbar-nav').at(2).contains('.curr')).toBe(true)
-		})
-	});
+  it('当前tabbar标签激活状态是否正确', () => {
+    return Vue.nextTick().then(function () {
+      expect(wrapper.findAll('.tabbar-nav').at(1).contains('.curr')).toBe(true);
+    });
+  });
 
-	it('当前tabbar标签显示的图片', () => {
-		return Vue.nextTick().then(function () {
-		   expect(wrapper.findAll('.tabbar-nav').at(0).find('.icon').hasStyle('background-image','url(./img/address.png)')).toBe(true);
-		})
-	});
+  it('点击切换tabbar标签', () => {
+    return Vue.nextTick().then(function () {
+      wrapper.findAll('.tabbar-nav').at(2).trigger('click');
+      expect(wrapper.findAll('.tabbar-nav').at(2).contains('.curr')).toBe(true);
+    });
+  });
 
-	it('当前tabbar标签的href链接', () => {
-		return Vue.nextTick().then(function () {
-		   expect(wrapper.findAll('.tabbar-nav').at(0).attributes('href')).toBe('http://nutui.jd.com/demo.html#/index');
-		})
-	});
-});
+  it('当前tabbar标签显示的图片', () => {
+    return Vue.nextTick().then(function () {
+      expect(wrapper.findAll('.tabbar-nav').at(0).find('.icon').hasStyle('background-image', 'url(./img/address.png)')).toBe(true);
+    });
+  });
+});