一週小結

前言

這周開始接觸到了十分正式的項目開發,感受本身距離能實戰真的差太多了,有一些小問題可能要半天或者更久才能解決,單元測試仍是硬傷,效率低的不行,早起九點開始寫代碼,晚上十一點多結束,甚至有一次肝到一點多,可是解決的問題很少,感受本身有程序員加班的潛質,尚未寫好代碼的水平,跟代碼交流挺有意思的,只是如今能力有限,有些問題還不能有效地解決,這一週的問題還真很多,總結性的整理了一下。git

帶有param的GET請求單元測試

以前對單元測試的理解是路由對上了就能過,即請求的url與預測的url對應上就能夠了,卻不知並不是全部的預測url與請求url一致就能夠,好比GET方法,下面是一個GET方法的請求:程序員

public  getUserByUsername(username: string): Observable<boolean> {
    return this.httpClient.get<boolean>(`${this.baseUrl}/getUserByUsername`, {params: {username}});
  }

下面是測試:github

it('getUserByUsername', () => {
    const username = Random.nextString ('', 11);
    let result;
    /* 進行訂閱,發送數據後將called置true */
    let called = false;
    service.getUserByUsername(username).subscribe ((data) => {
      called = true;
      result = data;
    });
    const request = httpController.expectOne ( `${baseUrl}/getUserByUsername`);
    expect (request.request.method).toEqual ('GET');
    req.flush(of(undefined));
    expect (called).toBe (true);
  });

而後運行測試:
image.png
當時不是很理解爲什麼報錯,後來問了一下潘老師,而後老師說教程上有:5 測試HTTP請求【前】,就看到了這:spring

const req = httpTestingController.expectOne('http://localhost:8080/Klass?name=');

我覺得加上參數就行了,而後就改爲了這樣:segmentfault

const request = httpController.expectOne ( `${baseUrl}/getUserByUsername?username=`);

結果可想而知,仍是ERROR,而後啓動項目,打開控制檯看了一下實際請求的:
image.png
注:該方法並不是項目原有的方法,只是爲了演示,因此請求時會發生錯誤。
實際請求的url帶有參數名和參數,而後就改爲了這樣:springboot

it('getUserByUsername', () => {
    const username = Random.nextString('', 11);
    let result;
    /* 進行訂閱,發送數據後將called置true */
    let called = false;
    service.getUserByUsername(username).subscribe ((data) => {
      called = true;
      result = data;
    });
    const request = httpController.expectOne( `${baseUrl}/getUserByUsername?usename=${username}`);
    expect(request.request.method).toEqual('GET');
    req.flush(of(undefined));
    expect(called).toBe(true);
  });

再次測試經過。
image.pngdom

在解決問題的時候看到StackOverflow解決一樣問題的博客下面有人這樣說,而後就懵了,畢竟教程用的expectOne()測試的帶有參數的url,通過本身實踐才發現實踐出真知,聽到的看到的都不必定是正確的。
image.pngide

結論

測試請求時,若是沒有把握就實際調用一下,看一下實際請求的url,預測的url要和實際請求的url徹底一致。單元測試

HTTP請求

以前常常用到的HTTP請求有GET,POST,PUT,DELETE等,
最近接觸到了PATCH,對於PATCH也只是在教程裏據說過,第一次用也不知道咋用,而後就查了一下:測試

PATCH是對 PUT 方法的補充,用來對已知資源進行局部更新 。

當時對patch請求不是很熟悉,而後就開始了「創做」:
老師已經給了後臺,前臺怎麼傳不是很熟悉,一開始想着直接傳:

updatePasswordOfCurrentLoginUser(password: Password): Observable<void> {
        return this.http.patch<void>(`${this.baseUrl}/updatePasswordOfCurrentLoginUser`, password);
    }

卻不知後臺只接收JSON對象,而後就改爲了:

updatePasswordOfCurrentLoginUser(password: Password): Observable<void> {
        return this.http.patch<void>(`${this.baseUrl}/updatePasswordOfCurrentLoginUser`, {params:rePassword});
    }

可是@RequestBody卻不收:
image.png
而後只能傳一個User對象過去,把後臺須要的值給User相應的屬性就行了。

小結

本覺得照着別人的寫能成功,但發現本身想的太天真,並無對應上。
image.png
後來在教程裏發現了請求對應的先後臺寫法:
image.png
綁定到用戶輸入事件【前】

總結

以前寫代碼都是Ctrl + C , Ctrl + V ,沒有切實地去體會代碼的意思,在出錯誤以前一直覺得本身的想法是對的,而後就一直照着本身的想法來,出錯了就懵了,各類想不通,好在此次把問題暴露出來了,改正了本身的一些想法,也補齊了一些知識性上的缺陷,固然也知道了遇到不會的先去教程找找,不然再趕上一樣的問題,又要很久才能解決。
最後,感謝潘老師和學長們以及小夥伴們給予的指導和幫助。

本文做者:河北工業大學夢雲智開發團隊 張文達

相關文章
相關標籤/搜索