前端业务组件的集成测试

2019-11-10 23:56:36 +08:00
 PainAndLove

最近写业务组件相关测试代码时,感觉想通过测试把页面上所有组件的每种表现情况都包含进去有点不现实。

假设现在有 A B 两个业务组件。分别请求 apiA 和 apiB 两个接口。那么至少就有 A 组件请求 成功 /失败 与 B 组件请求 成功 /失败 2x2 4 个用例(还没有包括别的情况,比如接口中返回了各种状态,还有各种组件的交互行为,这样就需要写更多)。如果还有别的组件 那么用例的数量至少是 2 的 N 次方。

当然,如果只是与业务逻辑无关的工具函数,那编写测试用例就很容易了,直接输入 /输出一把梭就搞定了,毕竟它们之间没有耦合关系。

所以之前的测试代码遇到上述的情况,也只是分别把 对应组件成功 /失败 单独写一份(有点单元测试的感觉)。并没有包含其他组件。

感觉这样写用例其实并没有达到想象中的效果,因为它只是单元测试,并没有将这些组件放在一起测试。

结论:

考虑使用 jest 的 snapshot 生成组件渲染之后的快照,来“间接”完成业务组件的用例编写。 比如在上述的情况中的 4 个用例,直接用 matchSnapShot 生成快照,通过 diff 来判断改动后的代码生成的快照和之前是否一致。

优点: 相比之前,可以少写大量用例代码。

缺点: 后续维护 snapshot 时,需要仔细判断 snapshot 中某段 diff 是不是符合预期。不能像一般的 expect 那样 直接返回期望值和实际值那样直观。

2361 次点击
所在节点    程序员
7 条回复
thulof
2019-11-11 02:14:28 +08:00
尽量写成纯函数,每个函数只关心自己。之前没意识到这一点,写测试的时候搞得很复杂。其实理想状态是写测试用例不需要了解内部实现。
thulof
2019-11-11 02:14:55 +08:00
晕,竟然是同事。。。
datou
2019-11-11 02:24:48 +08:00
看到跳刀就下意识点进来了....
justyy
2019-11-11 02:28:57 +08:00
看到跳刀就点进来了, 楼主用的是啥英雄? ursa? sk?
seki
2019-11-11 06:05:49 +08:00
snapshot 和你看某个元素的具体值不冲突,两个可以结合起来做

除了 snapshot 文件,还有 inline snapshot,这个是在测试代码里面更新的,应该更醒目

snapshot 的存在意义还包括如果有回归,可以根据修改历史定位到引入回归的提交,有总比没有好
orzorzorzorz
2019-11-11 06:26:20 +08:00
用例这东西,一向都是出了问题修完再补的。没辙,数量问题靠时间堆吧。快照这东西尽量少用,毕竟一个 -u 就解决了,不明白的人很容易这么干。
PainAndLove
2019-11-11 10:59:58 +08:00
@orzorzorzorz 也是,一开始不可能把所有的情况全写在用例里。而且也没有必要。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/618238

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX