在开发的过程中,偶尔发现刷新某个页面控制台报错了导致页面显示不出来,如下:
![](https://img.haomeiwen.com/i6782944/3bb83fa438cbb5fe.png)
我一开始还以为是vue代码有问题,后来发现是我代码有问题,追踪执行栈之后,发现assertType这个方法是检查 传入的props是否符合自己定义的类型,就是下面这一行报错了中断代码继续执行,页面显示不出来
![](https://img.haomeiwen.com/i6782944/070c4347a2674da8.png)
再看运行时这里为什么会报错,
valid = value instanceof type;
原来是 value = 2222, type = null ; 然后就报错了,如下图
![](https://img.haomeiwen.com/i6782944/1a0fb79b485f3c5c.png)
找到问题,是某个id设置的props有问题
id: {
type: [Number, null]
}
改为了
id : {
type: [String, Number]
}
问题解决了,改好了让测试测一下。测试拿改之前的代码来测,说本来就没有问题啊。
我。。。
奇怪,我怎么发现问题,测试却没有复现问题?难道我想多了。于是我继续排查,终于给我看到下面这一行代码
![](https://img.haomeiwen.com/i6782944/14c2b59cee9118f9.png)
一般没有人会这么写if(true)的,我反应过来了,应该是环境判断的问题,为了验证我的猜想,去源码找了一下,终于验证了我的猜想是对的 ,这里是vue源码位置
![](https://img.haomeiwen.com/i6782944/251d9f025fc9b6db.png)
好家伙,怪不得测试没法复现问题。只有非生产环境才能复现。
最后,和测试解释了一下,测试也愉快的接受了这个改动。
网友评论