排查前臺無顯示某個字段的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

相關文章
相關標籤/搜索