栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

E2E模拟$ httpBackend实际上没有通过

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

E2E模拟$ httpBackend实际上没有通过

以下是的目的的解释

$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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484471.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号