vue单元测试vuex,mutation,尤其是actions、getters怎么测?让你像使用vuex一样测试vuex

vuex怎么单元测试,我们只能通过检验state的值是否符合预期来测试,所以,正常的套路应该是测试mutation,然后看看对应的state是否发生了符合预期的变化。没错。 mutation 怎么测 比如这种 SET_LIST(state, payload) { state.listData = payload; }, // test.spec.js describe("mutations", async () => { it("mutations SET_LIST", async function() { SET_LIST(state, [123]); expect(state.listData).eql([123]); }); } 每个mutation就是一个方法,我们直接调用 SET_LIST(state, payload)检验对应的state就可以完成对SET_LIST的测试了。这当然简单了,毕竟mutation里面就这两个参数 action呢 action里面一般伴有发送请求,然后根据请求结果,触发对应的mutation,有时我们还会在action里面触发另外的action等较复杂的情况 下面列举了我们不愿意测action的原因: action可能进行接口调用 action可能发送当前module或其他module的state或getters action可能发送当前module或其他module的action 上述情况可能会组合出现 在测试这样的action时是不是会吐槽,action怎么会写这么复杂。哈哈,业务需要啊。 action里面也是两个参数,只是第一个参数context是一个对象 除了state、rootState、getters、rootGetters这几个对象用来获取值以外,里面还有commit、dispatch方法。 比如下面的两个action就比较复杂,还有“嵌套”关系 async _getDetail({ rootState, dispatch }, params) { const Read more…

vue多语言的解决方案不只是 vue-i18n,前端+后端完整解决方案

网上搜很多vue多语言的,一般都是介绍vue-i18n怎么使用,当然这是不错的,但是我们如果只是讲这个的话,只是解决了静态文字的多语言化。 这一部分我们也简单讲一下 npm install vue-i18n –save安装 // main.js import VueI18n from 'vue-i18n'; import messages from './i18n'; Vue.use(VueI18n); const locale = (localStorage.getItem("language") || navigator.language || navigator.browserLanguage).toLowerCase(); 为了避免被坑都转成小写。 // 通过选项创建 VueI18n 实例 const i18n = new VueI18n({ locale, // 设置地区 messages, // 设置地区信息 }); new Vue({ router, store, i18n, render: (h) => Read more…

pixel 3A (XL ) android P root教程Magisk

目前android Q的root貌似还没有搞定,还是老老实实先用android P吧 root的准备工作 解锁bootloader,步骤自行搜索 已经打过补丁的boot.img文件,目前有以下几个版本,自己对号入座,貌似3A和3A XL通用 PD2A.190115.029 | PD2A.190115.032 | PQ3B.190605.006 ADB Magisk Manager apk 实施步骤 adb reboot bootloader fastboot flash boot [boot image name].img 刷入上面打补丁的boot.img文件 fastboot reboot 重启 为了避免手机自动更新后root失效,建议关闭系统自动升级

从mapState、mapMutations的源码看数据归一化normalize

很多同学应该都知道mapState有以下三种写法: 不知道的童鞋可以查看本博客的《vuex的mapState mapActions mapMutations mapGetters在模块module使用详解》 export default { computed: { …mapState('pim', { count: state => state.count, // 1 page: 'currentPage', // 2 }), …mapState('pim', ['total']) // 3 } 它是怎么实现的呢?让人用起来很灵活啊。 先看看mapState的源码 var mapState = normalizeNamespace(function (namespace, states) { var res = {}; normalizeMap(states).forEach(function (ref) { var key = ref.key; var val Read more…

走到N层台阶有多少种走法

假设题目是有N层台阶,每次可以走一层或者两层,总共有几种走法。 首先我们不能简单的想到从小到大来求解,这种题需要用到数学归纳法,要先从N开始求解。首先想到既然要到N层,他能怎么到呢?只能是从第N-1层走一层到达N层,或者从N-2层一次走两层到达N层,只有这两种走法,所以我们很自然的想到f(n) = f(n-1) + f(n-2)了。然后我们很轻松的知道f(1) = 1,f(2) =2 function f(n) { if(n < =1) return 1; if(n===2) return 2; return f(n-1) + f(n-2) } 是不是看到了斐波那契数列了? 那尾调用优化肯定要问的 function f(n, a = 1, b =1) { if(n <=1) return b; return f(n – 1, b, a + b); }

根据道招网百度统计看程序员日常上班情况

多数访问本站的是程序员,并且多半是遇到前端开发(element-ui居多)的问题从百度搜索进入的。 下面是近7日的IP曲线图(现在是20190705 13:00) 第一个点事6月29日(周六),我们可以看出周末访问量腰斩,这也正常,周末多少程序员都在家里躺尸呢, 工作日的访问量还算正常。 接下来看看日分时曲线图,其中颜色较浅的是昨日的完整访问量 由于现在只是下午一点,部分童鞋还在午觉呢,我们主要更加昨天的数据来分析。 上午9点左右,开始有相对明显的访问量。 12点左右访问量下降较多,大家都去吃饭了嘛。 16点左右又有一个下降,看来大家都去和下午茶,划水去了。 18点的下架幅度更大,多少童鞋下班了啊,真羡慕。 18~20点的童鞋是在加班的小伙伴吗? 20点后又开始下降了,加班的童鞋你们回家了,是吧。 21~23点还在加班或者回家学习的小伙伴们,你们是最棒的。 每周的的周四基本类似,上面说的应该还是有一定的说服力的。

pm2管理node,运行 npm run server等命令

特别是现在很多SPA应用,比如VUE项目,我们在vps里面很可能需要使用node src/index.js这样运行: pm2 –name="graphql" start src/index.js 但是有时我们使用cross-env配置了环境变量,简单的直接执行node xxx命令就不太好了,因为我们会把更多的信息写在package.json里面,比如: "scripts": { "serve": "cross-env branch=sit NODE_ENV=development vue-cli-service serve" } 如果直接使用node命令的话就是npm run serve,但是怎么用pm2运行呢? pm2 –name="blog" start npm — run serve 大功告成

从vuecli3学习webpack记录(一)vue-cli-serve机制

最近看了看vuecli3,把自己的学习记录下来。 首先看入口npm run dev即是vue-cli-service serve,之所以能运行vue-cli-service命令,就是因为cli3为我们安装了vue-cli-service(执行的是npm install –save-dev vue-cli-service),这样可以在node_modules/.bin文件夹里面找到vue-cli-service.js,上面实际上执行的就是node_modules/.bin/service serve 看看vue-cli-service.js的部分代码 const Service = require('../lib/Service') const service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd()) const rawArgv = process.argv.slice(2) const args = require('minimist')(rawArgv, { boolean: [ // build 'modern', 'report', 'report-json', 'watch', // serve 'open', 'copy', 'https', // inspect 'verbose' ] }) const command Read more…

用个数组来理解vue的diff算法(一)

原文地址:道招网的用个数组来理解vue的diff算法(一) Vue使用的diff算法,我相信用vue的估计都听过,并且看到源码的也不在少数。 先对下面的代码做下说明: 由于这里用的是数组内元素的有移动来模拟dom元素的移动,所以简单的insertBefore之类的就不能用了,这里是靠删除+新增来模拟的移动。 这里没有在数组里面用纯数字,一是因为这样不显示,真实的vue里面肯定不会是基础数据类型,另一个是因为基础数据也不好比较,这么判断这个2是跟第一个2相同还是跟第二个2相同呢。 patchVnode里面的打补丁功能暂时没写,下一篇文章会讲。 保留了console.log信息,方便理解 var a1 = { key: 1, tag: "li", elm: "aaa1" }; var a2 = { key: 2, tag: "li", elm: "aaa2" }; var a3 = { key: 3, tag: "li", elm: "aaa3" }; var a4 = { key: 4, tag: "li", elm: "aaa4" Read more…

Javascript实现翻页器

需求: 写个函数pagination,接收两个参数,第一个是总数,第一个是当前页码,要求当前页码尽可能的在正中间,最多显示5个页码。 比如 pagination(10,4) 就输出 2 3 4 5 6, pagination(10,2)就输出 1 2 3 4 5, pagination(3,1)就输出 1 2 3 function pagination(total, current = total) { if (current > total) current = total; if (current < 1) current = 1; var res = [current]; var num = 4, step = Read more…