问题标签 [httpbackend]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
818 浏览

protractor - 正确使用 Protractor 和 $httpBackend

我已经阅读了 Protractor 的工作原理,我已经在其中编写了几个 E2E 测试,但我仍然对将它与$httpBackend服务一起使用感到不舒服,我认为我可能遗漏了图片的重要部分。

为了模拟 HTTP 调用,我需要使用Angular模块中提供的$httpBackend服务。ngMockE2E要将该模块包含在我正在测试的应用程序中,我需要在引导我的主模块时对其进行配置,作为它的依赖项,如下所示:

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

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

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

0 投票
1 回答
335 浏览

javascript - $httpBackend 模拟不发送请求?

经过太多小时后,我终生无法让这个示例正常工作。我正在按照 Ben Lesh 的优秀指南在 Angular中模拟$http请求,但由于某种原因,服务请求没有发送。

我已经通过构建一个单独的 HTML DOM 并将我的应用程序和一个微型控制器应用于它来验证该服务是否正常工作。我正在使用 Jasmine 1.3 和 Angular 1.2.9(angular-mocks.js当然还有)。

这是应用程序:

和测试:

我得到了一个Error: No pending request to flush !,当然还有一个Error: Unsatisfied requests: GET(因为什么都没有发送)。我观察了网络请求,果然,即使我删除了模拟后端,也没有发送任何请求。

我已经注释掉了一些东西,重组了一些东西,尝试了很多其他的例子,但都无济于事。有人能帮我吗?

0 投票
1 回答
403 浏览

angularjs - 为什么 $httpBackend 没有响应?

我在学习使用 Karma 对一些 AngularJS 代码进行单元测试时遇到困难,并且对 $httpBackend 的使用感到困惑。我创建了测试的精炼版本,仅显示我模拟 get 请求并期望看到对httpBackend.get(...).

它在第 11 行失败。这是我在日志中看到的内容。

我错过了什么?

[编辑:这就是我出错的地方......我将 $httpBackend 视为 $http 的模拟,而实际上并非如此。以下代码成功。]

0 投票
2 回答
3202 浏览

angularjs - 使用 $httpBackend 延迟响应

在我看来,我有加载动画,直到我收到来自 API 的响应。

为了进行测试,我使用了$httpBackendAngular 模块。像这样的东西:

问题

我想写一个测试来检查加载动画是否显示。

我试过了:

但我没有通过。所以我认为我需要有条件地延迟我从 $httpBackend 得到的响应。

我发现这篇博文http://endlessindirection.wordpress.com/2013/05/18/angularjs-delay-response-from-httpbackend/

但是,插入该配置方法使我的所有测试都失败了(我认为是因为模板没有及时加载),它会延迟所有响应,所以这并不是我真正需要的。

那么我怎样才能延迟那个电话的响应呢?理想情况下,我只想为该测试延迟它。

0 投票
3 回答
4957 浏览

javascript - 如何实际重置 $httpBackend 期望?

我已经尝试并试图让它发挥作用。文档很简洁,充其量是:

重置期望();- 重置所有请求预期,但保留所有后端定义。通常,当您想要重用 $httpBackend 模拟的同一实例时,您会在多阶段测试期间调用 resetExpectations。

每次调用我的第二个请求时,我的结果总是包含第一个结果的数据。查看这个小提琴http://jsfiddle.net/tbwn1gt0/2/我在第一次刷新后重置了期望,然后设置新的期望/结果然后再次刷新以产生不正确的数据。

我尝试过的其他事情包括添加一个带有 resetExpectations 的 afterEach(将每个请求放在一个新的 it 语句中)。以及一系列其他随机尝试。如果它试图将预期的 url 更改为不预期的东西,它应该会出错——所以我知道这些请求至少是通过 httpBackend 处理的。

这是一个缺陷还是我执行不正确?

0 投票
1 回答
382 浏览

javascript - $urlRouterProvider 创建 $httpBackend 错误

我正在使用 $httpBackend 服务来模拟我的服务测试请求。但是,我开始在测试中遇到错误,表明请求实际上是在发出而不是被嘲笑。当我注释掉我在应用程序配置中提供的全部路由时,测试全部通过。谁能解释为什么会这样?下面是我的代码和错误。

编辑 已编辑以包含 Whisher 的片段,但不确定我是否正确使用它。

应用程序.js

AssetManager.js

AssetManager.spec.js

所有请求的错误都是相同的

0 投票
3 回答
2070 浏览

javascript - 使 $httpBackend 忽略对服务器的任何请求

我有以下控制器(请注意,在实例化时我对 进行了显式调用$scope.getNotifications()):

然后我做了一些单元测试(注意控制器在每个之前被实例化):

到目前为止一切都很好。所有测试通过。但是,当我添加一个不需要任何 HTTP 调用的新测试(见下文)时,它会失败,因为afterEach()它会验证预期,但removeNotification(). 这是来自业力的错误消息: PhantomJS 1.9.7 (Windows 8) notificationCenterController removeNotification 应该从列表中删除给定的通知 FAILED 错误:意外的请求:GET api/v1/notifications 没有更多的请求预期

我的大部分测试都有 http 调用,因此将验证放在 afterEach 中是有意义的。我想知道还有什么其他选择可以避免在 N-1 测试中复制粘贴 afterEach 主体。有没有办法告诉$httpBackend忽略任何电话?

0 投票
2 回答
614 浏览

angularjs - 使用 $httpBackend 和 angular-translate 指令进行测试

我花费大量时间试图了解 $httpBackend 和 angular-translate 如何协同工作,以测试翻译功能是否仍然有效。

我在这一点上,我真的不知道如何解决这个问题。

我的测试当然失败了。问题是我不知道如何 1) 真正获取带有数据的 JSON 和 2) 说指令“这是你的数据,做你的工作”。

编辑:

好的,对这个问题有所了解。我只是在看这个角度模块的测试(https://github.com/angular-translate/angular-translate/tree/master/test/unit/directive),我可以让它工作:

然而,我想要的是将此解决方案与返回 JSON 的适当 AJAX 调用结合起来,以测试这是否也已完成。

0 投票
1 回答
2239 浏览

angularjs - AngularJS 测试:模拟 $httpBackend - 处理成功和错误方法

更新:我设法通过更新包含一些无效 ascii 字符的httpBackend.when请求来进一步缩小问题范围并修复意外请求错误

我在当前代码块中附加了一个Plunker 。

但是我仍然很难有效地测试成功和错误方法操作的触发。我还需要添加期望来检查消息广播。

为了测试上述场景,我设计了一个包含在 Plunker 中的 hack,但我相信应该有更好的方法来测试这些场景。

任何有关我如何克服此问题并测试响应消息状态的线索将不胜感激。

问题

我已经为我的测试设置了 $httpBackend 的预期值/响应,但是当我运行 $httpBackend.flush() 时,它失败,表明下面提到的错误。

指示的错误消息

我确实找到了一些讨论这个问题域的有用链接,它们确实帮助我缩小了问题范围。但我似乎仍然无法弄清楚这个单元测试失败的具体原因。

有用的堆栈溢出问题

有用的外部资源

我还尝试移动 flush() 调用,并尝试在按照此处的建议在测试中触发 $http 请求时调用 $apply 或 $digest 。

待测试的 AngularJS 服务

用于测试服务的规范

0 投票
0 回答
647 浏览

angularjs - $httpBackend 响应未定义

试图获得与示例中类似的行为

UnitTest.coffee

不知何故respond()不返回reguestHandler并转为Can not read property 'respond' of undefined'。我究竟做错了什么?