正确使用带有$ httpBackend的量角器

时间:2014-08-05 10:25:34

标签: protractor angularjs-e2e httpbackend

我已经读过Protractor如何工作,我已经在其中写了几个E2E测试,但我仍然对使用$httpBackend服务感到不舒服,我认为我可能错过了一个重要的部分图片。

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

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

它实际上意味着我需要从生产初始化中为我的E2E测试进行单独的初始化。这也意味着我需要单独的index.html

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

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

1 个答案:

答案 0 :(得分:2)

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

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

在grunt服务中,我没有包含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 -->
    '
]) ;

设置需要做一些工作,但一旦设置就可以提供很大的灵活性。