2017-03-03 41 views
1

我对Node.js非常陌生,所以我可能只是没有得到它,但经过很长时间的搜索,尝试了几种不同的解决方案后,我仍然无法找到像样的体面使用节点进行验收测试来模拟API响应的方法。我有一个JavaScript应用程序(实际上写在榆木),与API交互(很常见,我想象),我想写一些验收测试...所以我设置了硒和摩卡WebdriverIO,编写一些测试,当然现在我需要模拟一些API响应,以便我可以设置一些理论场景来测试。为什么似乎没有任何健壮的HTTP服务器模拟节点包? (或者有吗?)

mock-api-server:看起来很不错,但是没有办法调整从服务器发送回来的头文件!

mock-http-server:也看起来不错,让我调整标题,但没有办法重置模拟响应,而无需关闭整个服务器......!?这有问题,因为在浏览器窗口仍然打开时服务器不会关闭,所以这意味着我必须关闭并重新启动浏览器才能清除嘲笑!

json-server:简单而体面的方式来嘲笑一些响应,但它完全依赖磁盘上的文件进行响应。我想从测试运行中配置一些内容,而无需将文件读写到磁盘。

我错过了什么吗?这不是人们如何在节点宇宙中进行验收测试吗?每个人都只是在整个测试套件中使用一组固定的模拟数据吗?这对我来说听起来很疯狂......特别是因为看起来好像根据具有所有必要功能的快速服务器写出一个好的文件似乎不会那么困难......它是否存在?

必要的特点:

  1. 服务器可以配置和JavaScript的推出
  2. 回应(包括标题)可以动态配置
  3. 反应也可以在飞行中轻松重置,无需关闭服务器。
+0

问题要求我们推荐或找到一本书,工具,软件库,教程或其他非现场资源,因为它们倾向于吸引自以为是的答案和垃圾邮件,所以是***溢出***的话题。相反,请描述问题以及到目前为止解决问题所做的工作。 – jfriend00

+1

人们通常不会嘲笑http级别,因为这会降低单元测试的速度(嘲笑主要针对单元测试,我的经验中的验收测试不会模拟,他们会模拟) – slebetman

+0

@ jfriend00 - 对不起,我会更改标题这个问题更重要一点。不幸的是,我在新的领域,所以我不知道如何提出正确的问题!但是我得到了我之后的答案(来自slebetman和rsp) – mltsy

回答

1

我打了这个问题了,所以我建一个:https://github.com/pimterry/mockttp

在你正在寻找的东西而言,Mockttp:

  • 让你开始时&重新配置服务器动态地从JS测试运行,没有静态文件。
  • 让您调整头
  • 让您重新运行的服务器(虽然我建议你关闭&重启反正 - 与Mockttp这需要毫秒,清晰&很容易实现自动化,并为您提供一些不错的担保)

最重要的是,它:

  • 从两个节点配置&浏览器使用相同的代码,因此您可以测试普遍
  • 可以处理并行运行测试更快的测试
  • 可以伪造HTTPS服务器,自签名证书自动
  • 可以模拟作为拦截代理
  • 先后为当事情出错了一堆漂亮的调试支持(例如匹配的请求回来与当前配置的可读解释,示例代码,这将使该请求成功)

只是为了迅速在其他职位提示测试过程中的意见:我真的止跌”吨。部分原因是由于一系列限制(你被绑定到一个特定的环境,甚至可能是特定的节点版本,你必须嘲笑整个过程,所以没有并行测试,并且你不能模拟子进程),但主要是因为它不是真正的代表。对于非常小的速度成本,您可以使用真实的HTTP进行测试,并且知道您的请求响应肯定会在现实中起作用。

+0

哇!令人敬畏的工作:D我现在正在开发一个新项目,但是看起来它会是完美的! – mltsy

1

这不是人们如何在节点宇宙中进行验收测试吗?每个人都只是在整个测试套件中使用一组固定的模拟数据吗?

不可以。您不必做出实际的HTTP请求来测试您的应用程序。

所有优秀的测试框架都允许您通过运行路由和处理程序而不发出网络请求来伪造HTTP。你也可以模拟将实际的HTTP请求发送给外部API的函数,这些API首先应该被抽象出来,所以在这里也不需要发生实际的HTTP请求。

如果这还不够,你可以使用快速,哈皮,的RESTify,环回或其他一些框架,或纯http,甚至net模块(取决于有多少控制你需要总是写一个平凡简单的服务器 - 例如你应该总是测试不正确使用HTTP协议的无效响应,或者连接断开,连接不完全,连接速度慢等,并且你可能需要使用Node中较低的杠杆API来自己提供模拟数据。

顺便说一下,您还总是需要使用无效的JSON测试响应,因为人们经常错误地认为他们获得的JSON始终是有效的,而不是。看到这个答案,看看它为什么显得尤为重要:

特别是因为它看起来像它不会那么难写基于Express服务器上一个好具有所有必要的功能......它是否存在?

并非所有“不会那么难写”的东西必然存在。您可能需要编写它。嘿,你甚至有一个路线图,准备:

必要的特点:

  1. 服务器可以配置和JavaScript的推出
  2. 回应(包括标题),可以在运行
  3. 配置
  4. 响应也可以在运行中轻松重置,而无需关闭服务器。

现在,所有你需要的是选择一个名字,创建在GitHub回购协议,创建NPM项目并开始编码。

现在,即使“写起来也不难”,这并不意味着它会自己写。欢迎来到开放源代码的世界,而不是抱怨某些东西不存在,只是写它。

+0

哦,我并不是“抱怨没有东西存在”。我只是怀疑它不存在,并且正在合理地询问它是否确实存在,或者如果它不存在,我就错过了什么。我很高兴写一些东西,但如果我只是错过了这一点,这是浪费精力,因为我对这个景观很陌生,这里似乎就是这种情况:)我忽略的是,每个人都在经常JS世界(以及其他所有语言)嘲笑HTTP连接而不是嘲笑服务器。我很难做到这一点,因为我的项目是用ELM编写的。这就解释了它! :) – mltsy

+0

我会给你答案,因为你的第一句话和下面的段落真的解决了我的问题 - 即使其余的它感觉有点光顾;)感谢您的快速解释! – mltsy

0

你可以试试nock。 https://github.com/node-nock

它支持您的所有功能请求。

+0

啊!感谢您的推荐!它确实可以满足我概述的所有功能预期,但不幸的是,我正在寻找一些充当实际服务器的东西,因为我的应用程序不是Node应用程序。这是一个Elm应用程序,它恰好是用Node(webpack)编译和运行的。所以我一直在寻找一个功能齐全的模拟服务器(就像那些被引用的服务器一样),它可以方便地在我的Node测试环境(但是测试一个非Node应用程序)中进行设置和运行。 – mltsy

+0

@mltsy也许一些围绕node-nock暴露nock API的服务器可以做到这一点吗? – sylvain

相关问题