-1

我对这个测试有点困惑:

  describe('#getUsers', () => {
    it('should return an Observable<User[]>', () => {
      const dummyUsers: User[] = [
        new User(0, 'John'),
        new User(1, '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);
    });
  });

在学习 Angular 应用程序中的测试时,我多次看到类似的例子。

如果我认为不错,我们将声明一个用户数组,然后我们将返回相同的数组以响应请求。

最后,我们正在检查创建的数组是否与收到的相同。我无法理解其目的,这对我来说真的很奇怪。

将同一个数组与同一个数组进行比较有什么意义?

我不应该对 API 进行真正的 GET,然后检查是否有响应的元素吗?

4

1 回答 1

1

您不是在测试数据,而是在测试方法。您提供一些数据并让该方法获取该数据。如果该方法正常运行,您应该得到与提供的相同的数据。

但我想你的问题更多在于理解单元测试。之后是测试的集成部分,检查请求类型和调用次数。

我想很难确定你在哪里进行集成测试。您可以针对真实的 API 进行测试,但同时也增加了测试的依赖性,这使得它们更难维护。

我认为检查 API 是否返回值在单元测试中更容易测试。

于 2018-03-25T12:35:28.187 回答