大部分没接触过或者不愿意写前端单测,大家觉得主要原因在哪里? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LCINA
V2EX    前端开发

大部分没接触过或者不愿意写前端单测,大家觉得主要原因在哪里?

  •  
  •   LCINA 2022-05-31 08:47:39 +08:00 3620 次点击
    这是一个创建于 1229 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 前端单测的难点在哪?配置麻烦?不会写?维护成本高?
    2. 前端写单测最主要的价值点是什么?
    3. 写单测真的可以减少 bug 的产生?切实体会到有单测对重构来说可以提升信心。
    29 条回复    2022-09-21 17:43:01 +08:00
    murmur
        1
    murmur  
       2022-05-31 08:55:02 +08:00
    问题就再这,宁可推倒不重构,原来的系统烂 是前人和时间的锅,重构出问题就是你的锅

    何况是虽然烂但是修修补补居然能正常跑的那种,才是最恐怖
    evada
        2
    evada  
       2022-05-31 09:12:15 +08:00
    逻辑部分写单测还是很有用的,但是有些产品变化快,UI 的单元测试就要频繁改动比较麻烦,而且基准也得变。
    bootvue
        3
    bootvue  
       2022-05-31 09:33:37 +08:00
    工资 时间 不到位
    meteor957
        4
    meteor957  
       2022-05-31 09:34:49 +08:00
    工期有限
    otakustay
        5
    otakustay  
       2022-05-31 09:36:30 +08:00   4
    你需求和交互变得比女朋友心情还快,一份代码根本等不到重构就要被推翻丢弃,写个鬼的单元测试
    wenzichel
        6
    wenzichel  
       2022-05-31 10:02:27 +08:00
    1. 需求频繁变动;
    2. 时间太紧;
    qq73666
        7
    qq73666  
       2022-05-31 10:02:54 +08:00
    投入与产出不成正比,而且应该是自动化测试或者测试人员来写
    across
        8
    across  
       2022-05-31 10:06:46 +08:00 via iPhone
    因为页面 ui 型的月抛吧,不停更换重组,业务更新很频繁….

    做工具数据层,扩展支持多,就想着怎么搞稳。
    LCINA
        9
    LCINA  
    OP
       2022-05-31 10:07:46 +08:00
    @evada 我现在也是想着给工具类等公共函数补充单测,然后给业务组件那些写一下,其余的业务代码由于迭代频繁,我也觉得可以不写。
    LCINA
        10
    LCINA  
    OP
       2022-05-31 10:08:38 +08:00
    @qq73666 自动化测试用在项目重构是真的香,特别是大版本重构。但是业界好像没有比较成熟的方案,一直在造轮子,内耗严重。
    LCINA
        11
    LCINA  
    OP
       2022-05-31 10:09:29 +08:00
    @otakustay 这个确实,业务强相关的个人感觉也不需要做单测,但公共函数这类可以考虑写写。
    LCINA
        12
    LCINA  
    OP
       2022-05-31 10:11:04 +08:00
    @murmur 现在就是在重构别人的代码,与其说是重构,不如说是重写,真的比写业务难受多了,还要保证质量。引进自动化测试跟单测,保证基础业务以及工具类业务组件不受影响。
    lifesimple
        13
    lifesimple  
       2022-05-31 11:35:13 +08:00
    1. 额外的工作量
    2. 没时间
    3. 有时间也不会写 懒
    imycc
        14
    imycc  
       2022-05-31 11:39:45 +08:00
    工具类的组件可以写一写,修改这类函数牵扯太多,有单测比较稳妥。业务侧的代码一般改了就测了,不改也不怎么会变(除非修改了公共代码)
    做这些事情还是需要有企业 /团队文化来支撑的。适量的单测能提高自己的工作效率,减少 bug 。但做得太细也不会被计入产出,反而要被教育一顿,要聚焦关键问题。
    james2013
        15
    james2013  
       2022-05-31 12:26:19 +08:00 via Android   1
    1.单测耗时间
    2.很多跟界面相关的,写不了单测
    3.很多简单类似的操作,没有必要写
    abcbuzhiming
        16
    abcbuzhiming  
       2022-05-31 12:52:48 +08:00
    前端是最靠近用户的业务,变化最快。

    测试推动无论在哪个地方,都不适合高速变化的场合。所以本质是剧烈的变化,让测试失效了,而不是前端测试有什么问题。

    你要是比较稳定的业务并且愿意给时间,前端单元测试一样搞的起来
    szdubinbin
        17
    szdubinbin  
       2022-05-31 14:07:23 +08:00   1
    业务重 UI 短周期的可以没必要,我认为单测有价值点或者说对于技术有反哺的点在于,如果你真的要写一份可靠的测试,你会想怎么推翻设计或者改写原先 [又不是不能跑] 的代码,你会想办法去做方法抽离,然后想办法让他遵守单一职责链,减少 /剥离外部依赖,增加适配器(减少冗长不可测的判断),UI 和组件怎么做状态剥离,我认为这是对我有帮助的点。至于对于业务,其实没多少价值的,远比不上这周上 5 个让用户多点几下广告的需求来的重要。
    zhangshine
        18
    zhangshine  
       2022-05-31 14:36:22 +08:00
    时间紧、任务重、变化快
    ljrdxs
        19
    ljrdxs  
       2022-05-31 14:44:07 +08:00
    @james2013 第二点是核心。测试界面必须靠人看。
    freelancher
        20
    freelancher  
       2022-05-31 15:13:14 +08:00
    钱。你给双倍工资试试?

    本来测试的工作就交给测试做好了。现在都堆给研发了。
    otakustay
        21
    otakustay  
       2022-05-31 18:53:16 +08:00
    @ljrdxs #19 其实恰恰第二点并不是。严格按照可访问性做,自动测试工具无非就是一个盲人,盲人能得到的信息它也能得到,就能自动化测试
    ljrdxs
        22
    ljrdxs  
       2022-05-31 19:13:36 +08:00
    @otakustay 一、自动化测试和单元测试不是一回事。二、盲人不在乎你界面显示,只在乎 accessibility ,但前端怎么可以无视界面显示?
    LCINA
        23
    LCINA  
    OP
       2022-05-31 23:12:53 +08:00
    @otakustay 自动化测试还是依赖于开发自己去录制,然后最后在流水线上直接采用无头浏览器去执行,说白了就是一串 json ,然后找到对应的节点就点击,断言等。自动化测试对于后期的维护成本还是挺高的,比如业务接口一变化,界面布局一变化,可能就挂了几十个用例。但对于整个项目级别的重构,还是发挥了不少作用的,比如截图对比(还是存在字体在机器上的差别)等。
    LCINA
        24
    LCINA  
    OP
       2022-05-31 23:14:50 +08:00
    @szdubinbin 老哥稳
    LCINA
        25
    LCINA  
    OP
       2022-05-31 23:17:05 +08:00
    @abcbuzhiming 其实工具函数,业务组件,公共服务层写单测作用还是挺大的,测试人员可能不关注,类似于业务模块的话个人觉得可以不写,毕竟变更也比较频繁,维护成本高,收益低。
    otakustay
        26
    otakustay  
       2022-06-01 09:56:00 +08:00
    @ljrdxs #22 无头浏览器就是个盲人,靠 accessibility 做 assertion 就能搞自动化呗。很多系统自动化连可行性也达不到就是因为 accessibility 不行,就算拿无头浏览器把页面打开了,也写不出稳定的 assertion
    ljrdxs
        27
    ljrdxs  
       2022-06-01 13:36:37 +08:00
    @otakustay CSS 、和界面展示相关的 Javascript 还是要人看。再说这也跑题了,主楼是单元测试。这个本来就是测数据的,还特别适合 Java 、C#之类强类型面向对象。
    h1104350235
        28
    h1104350235  
       2022-06-21 14:19:52 +08:00
    需求天天变,代码天天改。国内前端大多这种情况,一切以上线为重,代码和人,一个能跑就行。
    daliusu
        29
    daliusu  
       2022-09-21 17:43:01 +08:00
    之前写过一点基础框架和核心逻辑的,业务这边我这公司入职 3 个月不到换了两版 UI ,你让我怎么写... 尤其是前端做 UI 的测试本来就很难,上家公司测试闲的没事想写,搞了半个月放弃了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4006 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:19 PVG 13:19 LAX 22:19 JFK 01:19
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86