【问题标题】:Angular Unit testing: Testing http with real APIsAngular 单元测试:使用真实 API 测试 http
【发布时间】:2020-12-29 13:37:46
【问题描述】:

我正在使用 karma 在 angular CLI 中编写单元测试。我想用真正的 API 测试 http 调用,而不是使用模拟。因为 API 模型经常变化,我正在寻找一种方法来确定我的端点响应。有解决方案或示例代码吗?

这是我想用真实 API 测试的服务:

  getCodeRequest(phone: string) {

    let params = new HttpParams();
    params = params.append('phone', String(phone));

    return this.http.get('/auth/request', { params });
  }

我将不胜感激任何提示或观点。

【问题讨论】:

  • 测试真正的API是什么意思?如果您的意思是测试它转到'/auth/request' 并正确返回,那么这不再是单元测试,因为它也在测试 BE
  • 是的。我的意思是完全测试像https://IP/api/v1/auth/request 这样的API。我该怎么办?
  • 1.启动您的后端 API 服务器。 2.调用getCodeRequest方法。 3. 断言结果

标签: angular api unit-testing testing karma-jasmine


【解决方案1】:

您所描述的不是单元测试,在这种实现方法中应避免使用。相反,您应该将其拆分为单独的单元测试和 e2e 测试。为您的 BE 进行一项单元测试,检查是否在给定预期输入的情况下返回预期输出。第二个测试应该使用模拟检查您的 FE,以确保使用正确的参数发送请求。如果你真的需要检查 api 的通过 - 你需要一个 e2e 测试。具体如何实现取决于您的后端环境。

因此,总而言之,不要尝试在单个单元测试中测试整个 API 调用。相反,

  1. 在 BE 上进行单元测试以测试 BE 端的行为
  2. 在您的 Angular 项目中进行单元测试(使用模拟)来测试您的前端
  3. 如果您仍然需要,请进行 e2e 测试以测试端到端事物,例如正确的 API。

祝你好运!

编辑

另外,附带说明一下 - 您的 API 模型不应不断变化。这是一种不好的做法,它为事情留下了空间。你/你的团队应该坐下来定义一个双方都坚持的清晰的 API。

祝你好运!

【讨论】:

    猜你喜欢
    • 2017-11-18
    • 2016-12-20
    • 2021-05-18
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多