我已经阅读了 Protractor 的工作原理,我已经在其中编写了几个 E2E 测试,但仍然对将它与 $httpBackend
服务一起使用感到不舒服,我认为我可能遗漏了图片的重要部分。
为了模拟出 HTTP 调用,我需要使用 Angular 的 $httpBackend
模块中提供的 ngMockE2E
service 。要将该模块包含在我正在测试的应用程序中,我需要在引导我的主模块时将其配置为它的依赖项,如下所示:
angular.module('myApp', ['ngMockE2E', 'bunch-of-other-dependencies'])
这实际上意味着我需要将 E2E 测试的初始化与生产初始化分开。这也意味着我需要有单独的
index.html
。维护这 2 个附加文件 与其根“几乎”相同似乎很麻烦。此外,单独的索引和模块定义意味着 测试将在与生产略有不同的应用程序 上进行测试,这对我来说似乎违背了它的目的。
我是否正确理解了这里的谜题,还是我遗漏了什么?
是否有更好的解决方案来使用 Angular 运行后端 E2E 测试?
或者至少有一些变通方法可以最大限度地减少维护烦恼的影响,如果它们真的不可避免的话?
最佳答案
我找到了一个可能对你有用的解决方法。
我在 html 页面中定义了我的应用程序,并将我的基本模块和 ngMockE2E 添加为依赖项。在我的 dist 构建中,我添加了 grunt-processhtml,它删除了 build:remove 注释之间的所有内容。
在 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 -->
'
]) ;
设置需要一些工作,但是一旦设置,它就提供了很大的灵活性。
关于protractor - 正确使用带有 $httpBackend 的 Protractor ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25136513/