【问题标题】:angular-mocks ignoring request角度模拟忽略请求
【发布时间】:2014-07-07 00:45:58
【问题描述】:

我正在尝试使用 Angular (v1.2.15) 的 $httpBackend 服务,但它只是忽略了我的请求。如您所见,我计划了两种请求,一种用于html 文档,另一种用于REST 请求。但是,当我提出请求时,什么也没有发生。我仍然收到承诺,但永远不会解决。如果我更改了请求并写了一些意想不到的东西,我会失败。

(function (angular) {
    'use strict';

    angular
        .module('testApp', ['ngMockE2E'])
        .run(function ($httpBackend, $http) {

            $httpBackend.whenGET(new RegExp(".*\/rest\/data$")).respond(function() {
                return [200, {title: 1}, {}]
            });

            $httpBackend.whenGET(new RegExp(".*\\.html$")).passThrough();

            $http.get("/rest/data").finally(function() {
                console.log("Request mocked");
            });

        });

}(angular));

编辑:

好的,我将向您展示我调试错误所遵循的步骤:

  • 我使用passThrough 函数而不是respond 来检查正则表达式是否被正确评估。是的,它发出了真正的请求,显然没有找到响应。
  • 在那之后,我检查了在 cmets 中已经解释过的刷新请求,但也收到了来自 angular 的消息,说没有请求。
  • console.log() 也不输出任何东西。警报、断点等。

还有其他想法吗?

编辑 2:

问题解决了。猜猜怎么看。我重新启动了 grunt 服务器并直接工作。

稍后我会尝试重现该错误,看看是否必须报告它

【问题讨论】:

    标签: javascript angularjs http angular-mock


    【解决方案1】:

    尝试刷新待处理的请求。

    $httpBackend.flush();
    

    【讨论】:

    • 嗯,我猜你是在$http.get 之后做的。可能是正则表达式不匹配吗?看起来不错,但您可以尝试使用确切的字符串以防万一。
    • 已经这样做了,如果我将获取请求更改为不匹配的字符串,我会收到一个错误,意外的 GET 请求。只是 $httpBackend 没有以任何理由解决承诺
    • 然后把我弄糊涂了。我看不出它为什么不起作用。您或许应该编辑您的问题以包含您尝试过的内容(例如flush())。
    【解决方案2】:

    title 变量的值是什么,或者不应该被引用?我讨厌默默失败的语言。您在 return 语句的末尾还缺少一个分号。可能还有其他 javascript voodoo 发生。建议在 Chrome 之类的调试器中运行它,看看实际发生了什么。

    您的回复中还缺少 mime-type 标头。

    【讨论】:

    • title 不是变量,而是属性名称。分号是可选的(尽管非常推荐),但这里缺少分号应该不是问题。在某些极端情况下,缺少分号会造成问题,但这不是其中之一。
    • 如果是 JSON 应该被引用。
    • 您可能正在做某事,我查看了文档,docs.angularjs.org/api/ngMock/service/$httpBackend#when。 “返回一个包含响应状态(数字)、响应数据(字符串)、响应标头(对象)和状态文本(字符串)的数组。”似乎响应负载应该是一个字符串,而不是一个对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2013-03-07
    • 1970-01-01
    • 2019-07-12
    • 2020-01-17
    • 2015-02-23
    相关资源
    最近更新 更多