- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
虽然我相信我在关注 instructions here设置 $httpBackend 将选定的请求传递给服务器,它对我不起作用。
Here is a Plunkr with a failing test这显示了我在做什么,并在评论中解释了似乎出了什么问题。
我的探索表明,出于某种原因,模拟 $httpBackend
没有真实 $httpBackend
的内部副本这样,当需要通过 XHR 请求时,它会将其传递给模拟 $httpBackend
反而。第二次调用引发异常,因为它不知道如何处理请求。
对 dtabuenc 的回应
我感激地记得你关于中途测试的帖子。您确定了介于单元测试和 E2E 测试之间的重要集成测试范围。我站在那个中间地带。
我觉得你一点也不刻薄。你的回答是完全合理的......或者它是合理的如果它与“API reference / ngMockE2E / $httpBackend”的文本不矛盾。我引用:
This implementation can be used to respond with static or dynamic responses via the
when
api and its shortcuts (whenGET
,whenPOST
, etc) and optionally pass through requests to the real$httpBackend
for specific requests (e.g. to interact with certain remote apis or to fetch templates from a webserver) ...[I]n an end-to-end testing scenario or in a scenario when an application is being developed with the real backend api replaced with a mock, it is often desirable for certain category of requests to bypass the mock and issue a real http request .... To configure the backend with this behavior use the
passThrough
request handler of when instead ofrespond
.[emphasis mine].
$httpBackend
的问题保持沉默在 Jasmine 环境中使用。我想不出理由来排除它。如果有这样的原因,他们应该清楚地说明。说真的,谁读到了一个模拟组件,却没想到在测试环境中使用它?
$httpBackend
以获取特定请求,例如与某些远程 API 交互”正是我打算做的。除了该组件的非模拟版本之外,“真正的 $httpBackend”可能意味着什么?
The
ngMocksE2E
module is designed to be used on the "server" side of things where the actual angular application is executing.
$httpBackend
不限于端到端测试。它也适用于“在开发应用程序时将真正的后端 api 替换为模拟的场景”。
Of course I can test (and do test) with mock XHR responses the component's ability to respond properly to what I predict will be the backend's behavior. That is not the same as validating that the component responds appropriately to the actual backend's behavior ... which might change as the application evolves and depart from the mocked responses in some significant way.
ngMidwayTester
无法访问发出 XHR 请求的组件。 .但如果必须的话,我确实知道如何将真正的 XHR 助手塞入管道中。
$httpBackend
将某些请求传递给服务器 - 正如文档所宣称的那样 - 或者我将替换
passThrough
自己用一个有效的 XHR 实现来实现。
最佳答案
以下是对 $httpBackend
用途的解释。那是在ngMockE2E
模块。ngMockE2E
模块根本不是设计的,也不打算在 Jasmine 规范中使用。
在进行端到端测试时,测试有两个方面。一个是正在测试的 Angular 应用程序,另一个是 Jasmine 规范中的 angular-scenario 代码。
在 E2E 测试中,没有 angular 模块、ng-mocks 或任何与 jasmine 方面相关的东西(除了场景运行器)。ngMocksE2E
模块设计用于执行实际 Angular 应用程序的“服务器”端。它的主要目的是使我们能够预先响应,以便集成级别的 UI 测试可以比每个页面实际到服务器获取 JSON 更快地进行。
当与 ng-mocks
一起使用 Jasmine 时, angular 将始终用模拟后端替换 $httpBackend。添加 ngMocksE2E
时模块将无法获取任何“真实”$httpBackend
正如您已经发现的那样,只会包装模拟并在传递时委托(delegate)给它。
看起来您正在尝试编写的测试类型不是测试 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
不能在端到端测试设置的客户端(即业力/ Jasmine )端使用。像你解释的那样去解释事物并不是没有道理的,但这并不能改变解释是错误的事实。
如果在应用程序的服务器端而不是客户端使用时得到指示,ngMockE2E 将通过请求。这意味着您仍然可以通过某些难以模拟为预设响应的请求。我所说的客户端和服务器端的意思是在端到端测试中有两个端点。您有由标准应用服务器提供服务的要测试的应用程序,并且您有驱动应用程序的测试代码,该代码通常在 Karma 或另一个测试运行程序中执行,它使用标准 HTTP 请求与正在执行的应用程序进行通信另一个过程。
如果您查看文档以及如何设置 ngMockE2E
你会注意到没有提到 Jasmine,并且说明是关于如何在真正的 Angular 应用程序中进行设置的:
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();
//...
});
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');
});
angular.mock.module()
时总是包含该模块)。使用
ngMidwayTester
时,事情应该完全按照您希望的方式工作。 .
关于angularjs - E2E 模拟 $httpBackend 对我来说实际上并没有通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20864764/
渐进增强和优雅降级基本是一回事吗? 最佳答案 不完全是。他们从不同的 Angular 解决类似的问题。 “优雅的降级”意味着你有漂亮的功能,并且可以在不支持它的浏览器中处理它不那么漂亮(但仍然需要它以
在过去的几周里,我一直在调优和处理 PostgreSQL,我将在我的下一个项目中使用它。 我的规范是: DigitalOcean 8 核 16GB SSD x2(一个用于数据库,另一个用于 Web)
我看过很多关于负数模的问题的答案。每一个答案都放了标准 (a/b)*b + a%b is equal to a 解释。我可以用这种方法计算任何模数,而且我知道有必要使用一个模数函数,如果它是负数,则将
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
The docs假设所有标签都存储在 .hgtags 中,但这里显然存在一些黑魔法。 我的标签如下所示: mbayazit:~/test$ cat .hgtags 0d80b6ba4ba3b51a44
我正在尝试强制删除待处理的更改列表。所有文件(20 个旧文件)都是新文件,但尚未提交/提交。所以在 p4Win 中,它们显示红色 + 十字。我无法从更改列表中删除这些文件。我该如何删除这些文件? 感谢
如果我要删除的文件不属于工作区,那么如何从工作区的目录中删除文件? 我的文件系统上有一个目录,其中包含从 perforce 获取的文件,但在某些进程运行后,它会在这些目录中创建一些新文件。 是否有 p
就是好奇这个。以下是同一功能的两个代码片段: void MyFunc1() { int i = 10; object obj = null; if(something) ret
我对使用约束布局还很陌生,我在调整布局大小方面遇到了问题,我希望它能够响应,这样我就不必再为不同的屏幕尺寸制作 10 个布局。在布局编辑器中,一切在不同尺寸下看起来都很完美,但实际上并非如此。 我做了
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
如果试图修改声明为 const 的对象,const 类型限定符会导致编译器发出错误消息,但这还不够保护。例如以下程序修改声明为 const 的数组的两个元素: #include int main(v
我不得不问这个,因为:我唯一知道的是,如果断言失败,应用程序就会崩溃。这就是为什么要使用 NSAssert 的原因吗?或者这样做还有什么好处?将 NSAssert 置于我在代码中所做的任何假设之上是否
我正在处理我的操作系统项目的 POSIX 子系统,并且我已经达到了我想要处理 pthreads 支持的地步。但是,我不确定我应该在多大程度上实现它们。 最常用的 pthreads 功能是什么?现在有什
这个问题不太可能对任何 future 的访客有帮助;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于互联网的全局受众。如需帮助使这个问题更广泛适用,visit the h
我正在尝试运行测试类,但抛出错误实际上有零交互。 class Xtractor{ void extractValues(request,Map m1, Map m2,Map m3){
我有一个抽象类UIObject,如下所示: public abstract class UIObject { private final int tabOrder; public UI
这是我尝试在 emacs lisp 中进行一些计算时得到的... (+ 2082844800. 1274511600.0) => 1209872752.0 (+ 2082844800.0 127451
我想用一条垂直线将屏幕分成两部分。垂直线应该从屏幕底部一直延伸到导航栏。如果我们使用 html/css,我只会有 2 个 div,并在右侧 div 上放置一个左边框。如果有办法在 View 的单侧放置
我有一个EC2实例可以正常工作数月(仍在开发中,应用程序尚未启用),但是我只是意识到我什至不知道如何根据流量来扩大/缩小EC2实例。 亚马逊提供的大量服务是压倒性的,我对此感到非常困惑。 最初,虽然我
考虑这个代码: int i = 1; int x = ++i + ++i; 我们对编译器可能会为这段代码做些什么有一些猜测,假设它可以编译。 两者 ++i返回 2 ,导致 x=4 . 一 ++i返回
我是一名优秀的程序员,十分优秀!