【问题标题】:Testing in AngularJS : How do I test the backend response of my API's?AngularJS 中的测试:如何测试我的 API 的后端响应?
【发布时间】:2016-05-09 15:18:52
【问题描述】:

我是 AngularJS 测试的新手,刚刚开始使用 Karma 和 jasmine 来测试特定的用例。实际上,我是一名前端开发人员,并且随着系统的迁移,后端 API 会不断变化。因此,我想对服务进行测试,在其中我可以从实际 API 中捕获响应,并在数据库导出时始终拥有相同数据并处于一致状态的情况下测试响应。 有没有办法做到这一点?因为我读过的所有文章都模拟了 API 的响应,然后测试了编写的各个方法。还是我必须使用量角器进行 E2E 测试?

【问题讨论】:

    标签: angularjs unit-testing jasmine protractor karma-runner


    【解决方案1】:

    当您使用 karma 运行测试时,您的后端将在您加载 angular-mocks.js 后立即被模拟(请参阅https://docs.angularjs.org/api/ngMock/service/$httpBackend)。这正是我们想要的,因为我们需要快速运行单元测试,而无需运行后端和数据库。

    如果你需要测试你的应用和真实API的交互,你需要用protactor做E2E测试,因为在这种测试中,后端是运行的。

    现在,如果您需要测试真正的 API 输出,那是 - 在我看来 - 后端开发人员的工作。话虽如此,您当然可以自己测试它,但它与 AngularJS 无关。我不是 NodeJS 开发人员,但有一些工具可以测试 API 端点。你可以看看SuperTest 例如至极

    为测试 HTTP 提供高级抽象

    这是他们文档中的一个示例:

    var request = require('supertest');
    var express = require('express');
    
    var app = express();
    
    app.get('/user', function(req, res) {
      res.status(200).json({ name: 'tobi' });
    });
    
    request(app)
      .get('/user')
      .expect('Content-Type', /json/)
      .expect('Content-Length', '15')
      .expect(200)
      .end(function(err, res) {
        if (err) throw err;
      });
    

    【讨论】:

    • @MBielski 我不想测试 API 是否正确计算输出......但是如果我们决定在响应中发送的参数相同,并且 API 端点仍然相同并且没有进行任何更改来提高端点的详细程度。就这样。我们在 NodeJS 后端的 Mocha 中进行了测试,以测试从该端点调用的每个函数。
    • @MBielski 你是对的,我更正了我的答案。谢谢你的观点
    • @SarasArya 你不需要你的 Angular 应用程序来检查你的 API 合同。例如,您可以使用 SuperTest 或 Chai 使用 mocha 完美地测试您的 nodeJs endopint。
    • 评论被删了,再想一想,发现你的后续评论没有它就没有意义。 OC 是如果你不加载 angular-mocks,Karma 不会模拟你的后端。
    【解决方案2】:

    许多人忘记了 Karma 并非特定于 Angular。它用于在 JavaScript 代码上运行测试,无论您可能使用或不使用哪种框架。因此,您可以使用 Karma 运行不使用 Angular 或 Angular Mocks 并与数据库交互的测试。这些类型的测试称为集成或功能测试(有一条细线将两者分开,具体取决于您如何看待它),它们应该包含在每个项目中。我见过这种性质的测试使用 Jasmine,我也见过他们使用 Mocha。这是你的选择。无论哪种方式,都不要期望它们运行得像单元测试一样快,因为您将与网络和数据库延迟作斗争。在开发周期中运行这些测试的时间取决于您自己。由于它们需要更长的时间,因此大多数情况下它们仅在完整构建或 API/数据库更改后运行。

    话虽如此,生成 API 的开发人员应该是编写/运行这些测试并为您(客户)提供更新文档的开发人员。

    【讨论】:

    • 您能否指出一些资源,该资源通过示例说明如何调用实时 API,然后他们断言响应?
    • 让人们为您搜索 Google 的东西并不是在 SO 上的做法。有很多网站可用于展示您想要的内容。像“Node mocha test api”这样的关键词应该会给你一个合理的列表。
    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    相关资源
    最近更新 更多