【问题标题】:Using Protractor with $httpBackend correctly正确使用 Protractor 和 $httpBackend
【发布时间】:2014-08-05 10:25:34
【问题描述】:

我已经阅读了 Protractor 的工作原理,我已经在其中编写了几个 E2E 测试,但我仍然对将它与 $httpBackend 服务一起使用感到不舒服,我认为我可能遗漏了图片的重要部分。

为了模拟 HTTP 调用,我需要使用 Angular 的 ngMockE2E 模块中提供的 $httpBackend service。要将该模块包含在我正在测试的应用程序中,我需要在引导我的主模块时将其配置为它的依赖项,如下所示:

angular.module('myApp', ['ngMockE2E', 'bunch-of-other-dependencies']) 

这实际上意味着我需要将 E2E 测试的初始化与生产初始化分开。这也意味着我需要单独的index.html

维护这两个“几乎”与其根“几乎”相同的附加文件似乎很麻烦。此外,单独的索引和模块定义意味着测试将在与生产略有不同的应用程序上进行测试,对我来说这似乎违背了它的目的。

我是否正确理解了这里的谜题,还是我遗漏了什么? 有没有更好的解决方案来使用 Angular 运行后端 E2E 测试? 或者至少有一些解决方法可以最大限度地减少维护烦恼的影响,如果它们真的不可避免的话?

【问题讨论】:

    标签: protractor angularjs-e2e httpbackend


    【解决方案1】:

    我找到了可能对您有用的解决方法。

    我在 html 页面中定义我的应用程序并将我的基本模块和 ngMockE2E 添加为依赖项。在我的 dist 构建中,我添加了 grunt-processhtml,它删除了 build:remove cmets 之间的所有内容。

    在 grunt serve 中,我没有包含 grunt-processhtml,因此它与 $httpBackend 一起运行。以同样的方式,我添加了在 dist 构建中删除的 httpBackend 期望。

    angular.module('myApp', [
        'myAppModule'
     <!-- build:remove -->
     <!-- including ngMock to test locally, but build remove wil make sure it's not in the dist -->
        , 'ngMockE2E'
        <!-- /build -->
        '
    ]) ;
    

    设置起来有点麻烦,但是一旦设置就提供了很大的灵活性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 2017-02-03
      相关资源
      最近更新 更多