以下是的目的的解释
$httpBackend那是在
ngMockE2E模块。
ngMockE2E根本不设计该模块,也不打算在茉莉花规范中使用该模块。
进行端到端测试时,测试有两个方面。一个是正在测试的角度应用程序,另一个是Jasmine规范中包含的角度方案代码。
在E2E测试中,在茉莉花的一面(除了场景运行程序之外)没有角度模块,ng-mocks或任何与角度相关的东西。
该
ngMocksE2E模块设计用于实际执行角度应用程序的“服务器”端。这样做的主要目的是使我们能够预先响应,从而使集成级UI测试比将每个页面实际转到JSON服务器的速度要快得多。
与一起使用jasmine时
ng-mocks,angular始终将$
httpBackend替换为模拟后端。添加
ngMocksE2E模块时,它将无法获得任何“真实”的信息
$httpBackend,并且您已经发现,将包装模拟并将其委托给传递对象。
您尝试编写的测试似乎是不测试UI集成,但测试应用程序javascript和服务器集成的测试。
这是完全合法的测试样式(在angular社区中称为“ midwayTesting”)。您的问题是您使用了错误的工具。
我来看一下:
https://github.com/yearofmoo/ngMidwayTester
为了方便我假设要进行的测试,您将使用而不是angular-mocks和angular.module()。
你可以在这里读更多关于它的内容:
http://www.yearofmoo.com/2013/01/full-spectrum-testing-with-angularjs-and-
karma.html
(很抱歉,如果您已经在那里链接了)
编辑:( 以解决其他评论)
您有一个真正的牛肉,因为文档不清晰,
ngMockE2E无法在端到端测试设置的客户端(即业力/茉莉花)端使用。像解释事物一样解释事物并不是没有道理的,但这并没有改变解释错误的事实。
如果在应用程序的服务器端而不是客户端上使用ngMockE2E,则如果有指示,它将通过请求。这意味着您仍然可以通过某些难以模仿的请求(如罐头响应)。客户端和服务器端的意思是,在端到端测试中有两个目的。您拥有由标准应用程序服务器提供服务的待测试应用程序,并且具有驱动通常在Karma或其他测试运行程序中运行的应用程序的测试代码,这些代码使用标准HTTP请求与在Windows
Server 2003中执行的应用程序进行通信另一个过程。
如果您查看文档以及如何设置,
ngMockE2E您会发现没有提到Jasmine,而说明是关于如何在实际的角度应用程序中进行设置的:
myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);myAppDev.run(function($httpBackend) { phones = [{name: 'phone1'}, {name: 'phone2'}]; // returns the current list of phones $httpBackend.whenGET('/phones').respond(phones); // adds a new phone to the phones array $httpBackend.whenPOST('/phones').respond(function(method, url, data) { phones.push(angular.fromJson(data)); }); $httpBackend.whenGET(/^/templates//).passThrough(); //...});如您在本示例中看到的,他们正在模拟所有JSON数据指令,同时仍然允许其从服务器获取模板。
为了从茉莉花中使用它,设置会大不相同,先使用
angular.mock.module('ngMockE2E'),然后在$httpBackend.whenGET()中
beforeEach()而不是在中进行设置
module.run()。
据
ngMidwayTester我所知,实际上,这与兼容
ngMockE2E。本质上是
ngMidwayTester替换
angular.mock.module()并
inject()具有其自己的实现。因此,您可以像这样使用它:
beforeEach(function(){ tester = ngMidwayTester('app', 'ngMockE2E'); $http = tester.inject('$http'); $httpBackend = tester.inject('$httpBackend'); $rootScope = tester.inject('$rootScope');});这应该可行,因为您不再使用ngMock模块(使用时会始终包含该模块
angular.mock.module())。事情应该完全像您希望它们使用那样工作
ngMidwayTester。



