Node.js:如何测试我的 API,模拟我的 API 调用的第三方 API

Posted

技术标签:

【中文标题】Node.js:如何测试我的 API,模拟我的 API 调用的第三方 API【英文标题】:Node.js: How to test my API, mocking a third party API called by my API 【发布时间】:2013-09-17 22:25:29 【问题描述】:

我正在开发一个 RESTful Node.js API (express+mongoose) 此 API 调用第三方 Oauth API(google、facebook 等)。

到目前为止,我一直很高兴使用 mocha+chai+request 设置自动化测试,但是我在模拟第三方 API 以测试调用它的(我的 API)路由时遇到了麻烦。 我尝试过使用 nock,但它不适用于我的用例。

要运行我的测试,我启动我的 API (npm start),然后在另一个选项卡中启动测试套件 (npm test)。测试套件使用请求通过 HTTP 测试 API。 因此,我认为 nock 在这里不起作用,因为它在“测试套件”过程中而不是在“API”过程中模拟 http。

我绝对需要模拟这个第三方调用,原因有两个: 1. 我希望能够离线运行我的测试套件,一切都在我的笔记本电脑上运行 2. 由于第三方 API 使用 Oauth,测试套件中的硬编码凭据(即使对于测试帐户)似乎不太容易。

我真的很想不要在我的测试覆盖中留下这个巨大的漏洞,所以任何建议都会非常感激!

【问题讨论】:

您有没有在这里提出过解决方案?我也有类似情况,想解决。令人惊讶的是,要找到关于这个话题的任何讨论是多么困难! 其实我确实想出了一些东西,我明天会发布。我不知道它是否是最先进的,但它可以完成这项工作 太棒了!感谢您的回复并期待您的解决方案。 抱歉,我花了一些时间才发布它。希望对你有帮助 不用担心,感谢您抽出宝贵时间发布此内容! 【参考方案1】:

所以这就是我解决自己问题的方法。我在第一次为应用程序设置适当的测试时自己想出了它,所以请随时提出改进建议。免责声明:我使用咖啡脚本

第一步是从另一个文件 starter.coffee 启动我的应用程序,该文件基本上如下所示:

# This file starts the API locally
require './test/mocks/google_mock'
require './app'

所以要启动我的服务器进行测试,而不是执行coffee app.coffee,我会执行coffee starter.coffee

google_mock.coffee 文件在应用从 app.coffee 文件启动之前模拟 Google API。 为此,我使用nock!包。

google_mock.coffee 文件如下所示:

nock = require 'nock'
# mocking up google api
googleapis = nock('https://www.googleapis.com')
  .get('/userinfo/v2/me')
  .reply(401)

还有更多用于模拟其他 Google api 调用的行。

【讨论】:

以上是关于Node.js:如何测试我的 API,模拟我的 API 调用的第三方 API的主要内容,如果未能解决你的问题,请参考以下文章

你如何在 Node.js 中模拟 MySQL(没有 ORM)?

如何在Node.js中对使用promises和事件发射器的函数进行单元测试?

如何使用 promise 将数组从我的模块返回到我的 API?异步函数和承诺 - Node.js

Typescript / Node.js - 如何模拟集成测试的传递依赖项?

如何从 Node.js/Express 服务器调用 GraphQL API?

如何设计我的 Node.js API,以便我也可以从服务器端使用它?