vue豆瓣

vue+vue-router+axios+vuex+iview UI

router 分为/ /movie /book
iview UI 使用了Menu, Tabs,Page, Spin, Button(ButtonGroup),Divider,BackTop
in movie and book.vue on Spin
vuex: movie.js book.js

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

技术方案

github地址: https://github.com/ljlhnick/vueDouban
采用的技术支持:

  1. Vue框架,基于vue-cli3版本,可以采用vue ui查看图形化界面 ;
  2. vue-router router 将路由分为分为/ /movie /book三大部分;
  3. 采用 iview UI 框架,使用了Menu, Tabs,Page, Spin, Button(ButtonGroup),Divider,BackTop组件( in movie and book.vue on Spin);
  4. vuex 进行数据的状态管理;
  5. 使用axios与后台进行接口数据的交互;
  6. 采用 testE2E

模块划分

电影:懒加载,tab切换,分页,点击查看详情的路由跳转,回到顶部
电影详情:轮播图,列表渲染
图书:懒加载,tab切换,分页,点击查看详情的路由跳转,回到顶部
图书详情:列表渲染,modal对话框

功能图

movie
电影列表
电影详情

Book
书籍列表
书籍tab切换
书籍详情

测试

// A code block
var foo = 'bar';

unit 截图
unit单元测试
E2E
黑盒测试

单元测试覆盖率之jest测试

安装依赖包: jest、vue-jest、bebel-jest, chai(断言库)
配置图:(jest.conf.js)
jest.conf.js
在package.json中新增jest命令
jest命令
编写.spec.js/.js测试文件

import { expect } from 'chai';
import Vue from "vue";
import Index from '@/components/Index.vue';
import IndexStore from "../../src/store/index.js";

describe('Index.vue', () => {
  //检查原始组件选项
  it('has a created hook',() => {
    expect(typeof Index.created).to.eql("function");
  });

  // 评估Index组件中Carousel组件从下标为0的图片开始
  it('sets the correct default data',() => { 
    expect(typeof Index.data).to.eql('function');
    const defaultData = Index.data();
    expect(defaultData.carouseIndex).to.exist;
    expect(defaultData.carouseIndex).to.eql(0);
  });


  //创建一个实例并检查渲染输出--图片轮播有5张
  it('render the correct message', ()=>{
    const Constructor = Vue.extend(Index);
    const vm = new Constructor().$mount();
    expect(vm.$el.carsouleList).length == 5;
  });

  //通过但是没有被覆盖
  it('check computed value', () => {
    const vm = new Vue(Index).$mount();
    expect(Index.computed.products).length === 4;
    expect(vm.$el.products).length > 0;
  })

单元测试覆盖率截图(点开coverage下的一个html文件)
在这里插入图片描述

控制台调试

VUE_DEVTOOLS_GLOBAL_HOOK.store查看store,有以下属性
在这里插入图片描述
在这里插入图片描述

路由拦截

beforeRouteEnter (to, from, next) {
// 在渲染该组件的对应路由被 confirm 前调用
// 不!能!获取组件实例 this
// 因为当钩子执行前,组件实例还没被创建
},
beforeRouteUpdate (to, from, next) {
// 在当前路由改变,但是该组件被复用时调用
// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
// 可以访问组件实例 this
},
beforeRouteLeave (to, from, next) {
// 导航离开该组件的对应路由时调用
// 可以访问组件实例 this
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值