排查前台无显示某个字段的bug

前言

做业提交系统匆匆上线后,在判卷过程当中发现,当点击下一个做业时,做业的文件目录不显示。这致使我一度觉得学生交了白卷上去,果断打了0分。后来在好友的提醒下,才发现这个问题。咱们发现只有当第一次点进去的做业才有文件目录,其余自动下一个的做业无文件目录。
image.pnggit

排查

首先,一开始怀疑v层显示有问题,看了看其余地方,写法差很少,而且第一个做业正常显示,没问题。
而后看一下c层,前台打印一下做业相关文件信息,发现为undefined。
image.png
第一次数据初始化和后面的下一个做业请求的是不一样地址。可是都是将返回的data赋值给work,一个是返回的是work类型,一个返回的是Page<Work>类型。work都应该是完整的接收到了后台返回的数据才对。
image.pnggithub

image.png
而后又去看了眼后台,想起了本身原来写的@JsonView,恍然大悟。
image.png
原来请求下一个未评阅的方法为了方便,直接请求后台的getAll方法,而后拿出来第一个未评阅的做业给work。可是后台的getAll方法当初设计的时候减小非必要的信息,没有让他返回Attachments也就是做业文件字段。从而致使了前台获取不到文件字段。问题的缘由找到了,问题也就迎刃而解,直接修改后台getAll的JsonView,在GetAllJsonView定义上继承Work.AttachmentsJsonView,问题解决,提交。segmentfault

如何避免

这貌似只是解决了当前问题,却使得要改变@JsonView,感受不该该这么改。
一开始想写单元测试避免这种状况再发生,可是从前台c层想到前台m层,在想到后台c层,发现这并非单元测试可以解决的。前台只要有数据就正常显示没问题,后台getAll方法不返回做业文件也没问题。问题是咱们的前台本应想获取某一做业,却请求了后台getAll方法。
解决:
经过上面的分析,咱们要恢复后台返回给前台单个做业的方法。那咱们只能在后台m层经过获取未评阅的第一个做业来获取下一个做业。ide

/**
 * 获得下一个未评阅的做业
 * @return 做业
 */
@Override
public Work getNextNotReviewedWork() {
    Pageable pageable = PageRequest.of(0,10);
    Page<Work> works = this.getAll(null, null, null, false, pageable);
    List<Work> workList = works.getContent();
    Work work = workList.get(0);
    return work;
}

这样修改虽然费事了点,可是感受更加规范。单元测试

总结

有些是单元测试解决不了的问题,这时只能靠咱们的规范来减小bug。测试

版权声明

本文做者:河北工业大学梦云智开发团队 - 赵凯强this

相关文章
相关标签/搜索