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

sai*_*mac 5 testing api mocking node.js

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

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

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

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

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

sai*_*mac 3

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

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

# This file starts the API locally
require './test/mocks/google_mock'
require './app'
Run Code Online (Sandbox Code Playgroud)

因此,要启动我的服务器进行测试,coffee app.coffee我不会这样做,而是会这样做coffee starter.coffee

google_mock.coffee在从文件启动应用程序之前,该文件会模拟 Google API app.coffee。为此,我使用箭尾!包裹。

这些google_mock.coffee文件看起来像这样:

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

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