关于angular:一周小结

前言

这周开始接触到了非常正式的我的项目开发,感觉本人间隔能实战真的差太多了,有一些小问题可能要半天或者更久能力解决,单元测试还是硬伤,效率低的不行,早起九点开始写代码,早晨十一点多完结,甚至有一次肝到一点多,然而解决的问题不多,感觉本人有程序员加班的潜质,还没有写好代码的程度,跟代码交换挺有意思的,只是当初能力无限,有些问题还不能无效地解决,这一周的问题还真不少,总结性的整顿了一下。

带有param的GET申请单元测试

之前对单元测试的了解是路由对上了就能过,即申请的url与预测的url对应上就能够了,殊不知并非所有的预测url与申请url统一就能够,比方GET办法,上面是一个GET办法的申请:

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

上面是测试:

 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);
  });

而后运行测试:

过后不是很了解为何报错,起初问了一下潘老师,而后老师说教程上有:5 测试HTTP申请【前】,就看到了这:

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

我认为加上参数就好了,而后就改成了这样:

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

后果可想而知,还是ERROR,而后启动我的项目,关上控制台看了一下理论申请的:

注:该办法并非我的项目原有的办法,只是为了演示,所以申请时会产生谬误。
理论申请的url带有参数名和参数,而后就改成了这样:

 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?${username}`);
    expect (request.request.method).toEqual ('GET');
    req.flush(of(undefined));
    expect (called).toBe (true);
  });

再次测试通过。

在解决问题的时候看到StackOverflow解决同样问题的博客上面有人这样说,而后就懵了,毕竟教程用的expectOne()测试的带有参数的url,通过本人实际才发现实际出真知,听到的看到的都不肯定是正确的。

论断

测试申请时,如果没有把握就理论调用一下,看一下理论申请的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却不收:

而后只能传一个User对象过来,把后盾须要的值给User相应的属性就好了。

小结

本认为照着他人的写能胜利,但发现自己想的太天真,并没有对应上。

起初在教程里发现了申请对应的前后台写法:

绑定到用户输出事件【前】

总结

之前写代码都是Ctrl + C , Ctrl + V ,没有切实地去领会代码的意思,在出谬误之前始终认为本人的想法是对的,而后就始终照着本人的想法来,出错了就懵了,各种想不通,好在这次把问题裸露进去了,改过了本人的一些想法,也补齐了一些知识性上的缺点,当然也晓得了遇到不会的先去教程找找,否则再遇上同样的问题,又要良久能力解决。
最初,感激潘老师和学长们以及小伙伴们给予的领导和帮忙。

本文作者:河北工业大学梦云智开发团队 张文达

本文由乐趣区整理发布,转载请注明出处,谢谢。

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据