代码之家  ›  专栏  ›  技术社区  ›  mwilson

单元测试httpclient-角度/业力

  •  0
  • mwilson  · 技术社区  · 7 年前

    我正在阅读一些关于单元测试的文章,并找到了一些非常有用的例子。我所遇到的大多数例子似乎都是对一个函数进行单元测试,该函数使用 HttpClient 大多数看起来像这样:

    it('should return an Observable<User[]>', () => {
        const dummyUsers = [
          { login: 'John' },
          { login: 'Doe' }
        ];
    
        service.getUsers().subscribe(users => {
          expect(users.length).toBe(2);
          expect(users).toEqual(dummyUsers);
        });
    
        const req = httpMock.expectOne(`${service.API_URL}/users`);
        expect(req.request.method).toBe("GET");
        req.flush(dummyUsers);
      });
    

    https://medium.com/netscape/testing-with-the-angular-httpclient-api-648203820712

    这意味着 .getUsers() 返回可观察值。但是,在我的应用程序中,我没有返回可观察到的。几乎所有我的 httpclient公司 呼叫与此类似:

    async getCurrentUser(): Promise<UserInfo> {
         return await this._httpClient.get(`/api/me`).toPromise();
    }
    

    如何在karma中对调用httppost或httpget的函数进行单元测试?

    尝试:

      it('should get current user', async () => {
        const result = service.getCurrentUser();
        console.log('RESULT', result);
        const req = httpMock.expectOne(`/api/me`);
        const test = req.flush({test: 'ing'});
        console.log('REQUEST', test);
    
        expect('a').toEqual('a');
      });
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   mwilson    7 年前

    我想我想我想得太多了,但是我用 .then 而不是使用 await 就像我在正常(非测试)通话中一样:

    it('should get current user', async () => {
        const response = new CustomResponseClass();
        response.success = true;
        response.error = null;
        const user = new User();
        user.userId = 1;
        user.name = 'Test User';
        response.data = user;
        service.getCurrentUser().then( _user => {
          console.log('USER', _user);
          // TODO: Some more unit tests here...
        });
        const req = httpMock.expectOne('/api/me');
        expect(req.request.method).toEqual('GET');
        req.flush(response);
      });