【问题标题】:AngularJS Protractor Tests - should E2E tests have fixtures?AngularJS Protractor 测试 - E2E 测试应该有固定装置吗?
【发布时间】:2014-01-12 00:54:47
【问题描述】:

有大量问题询问如何在量角器测试中模拟 http 响应。如何做到这一点不是问题,我们应该这样做是问题。

http://en.wikipedia.org/wiki/Test_fixture#Software

我从事 QA 工程师已有 4 年多了,我的大部分自动化测试经验都涉及控制器、模型等的低级(单元)测试和完整系统的高级(集成)测试。在我的 ruby​​ 世界经验中,我们使用 Capybara 进行集成测试以及 blueprint 和 factorygirl(用于不同的项目)来创建模拟数据库条目。这是我们的集成/E2E 测试。

我最近才搬到一个使用 AngularJS 的 javascript 团队。最初的内置测试框架(现已弃用)有一个模拟后端模块,似乎适合我们的需求。量角器现在是标准。直到量角器蒸熟后,我才听到使用夹具进行端到端测试的反弹。许多帖子都指出 E2E 测试应该测试整个堆栈,因此任何后端都不应该被模拟并且可以访问。

集成测试应该使用fixture,为什么?

【问题讨论】:

  • 我使用这两种测试。 “E2E”测试使用模拟后端来测试 UI 的细节(当我单击按钮 B 时是否会出现 div A 等),以及使用真实后端进行更粗粒度的 E2E 测试以确保前端和后端正常工作。
  • 我认为您应该能够在没有后端的情况下进行 E2E 测试 - 因为后端可能在与前端不同的时间轴上开发。模拟可以成为推进开发的有用工具,一旦不再需要模拟,就可以轻松更改编写的测试以接受实际的后端。
  • 为什么不使用fixtures的问题是当我多次运行创建操作的E2E测试时,我将在我的数据库中创建越来越多的虚拟数据,清除这些数据将涉及我流程中的另一个步骤.

标签: angularjs testing integration protractor


【解决方案1】:

您要问 2 个问题 - 关于 e2e 测试集成测试。 :)

e2e 测试,至少在 Angular 的世界里,正在测试您的完整应用程序,因为真实用户可以与之交互。这包括测试您的后端请求和响应。但是,如果它运行缓慢并且需要资源,那么切换到较小(甚至是假)的后端版本进行测试是非常有意义的。

集成测试是关于代码的一部分,单元测试是关于单个单元的。两次都可以模拟部分或所有依赖项以隔离测试。

因此,在所有情况下,使用固定装置或模拟都是有用的。

有关 Karma 和 Protractor 的用例、优势和限制的更详细讨论,请参阅 my answer here

【讨论】:

    【解决方案2】:

    我在个人代码项目中遇到了同样的问题。我正在使用 MEAN 堆栈,我的解决方案是:

    1. 使用 Grunt 运行测试。
    2. 在启动 Node 服务器之前,使用 mongoose 夹具设置 Mongodb 测试数据库 (https://github.com/powmedia/mongoose-fixtures)
    3. 使用参数启动节点服务器,使其使用测试数据库。

    如果在不同的堆栈上,您可以使用这种方法,尽管 Grunt 作为一般的作业运行器非常有用。

    【讨论】:

      【解决方案3】:

      这里有一个词汇问题。 Angular 世界中所谓的“e2e”测试与端到端测试无关。它只是 UI 部分的端到端,这意味着根本没有 e2e 测试。这是 UI 测试。

      Gojko Adzic 在“示例规范”一书中,建议“在应用程序的皮肤下”进行功能性、基于夹具的测试,即没有 UI 部分。

      回答你的问题:

      -UI 测试应该有固定装置吗?不,使用模拟或存根

      -后端测试应该有固定装置吗?是的

      【讨论】:

      • 您能否详细说明一下“UI 测试应该有固定装置吗?不,使用模拟或存根”?谢谢
      • 我的意思是,不仅是为了让测试正常工作的设置,还有随之而来的与业务相关的用例。有时在 UI 上工作是有意义的,但您不能仅根据 UI 可以实现的功能来测试所有业务案例。
      【解决方案4】:

      是的,我们使用 ngMockE2E 来模拟后端,然后向窗口对象公开一些帮助程序,以便我们可以播种各种模拟数据状态。我们还使用 sinon 来强制测试日期敏感 UI 的特定时间,因此所有新的 Date() 调用都会返回您想要的内容

      【讨论】:

      • 你们搬到量角器了吗?它不适用于 ngMockE2E 提供的模拟后端 - 我知道有些人已经让它工作了 - 但我没有。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2016-03-04
      • 2018-08-20
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      相关资源
      最近更新 更多