如何实际重置 $httpBackend 期望?

2023-12-21

我已经尝试过并试图让它发挥作用。这文档 https://docs.angularjs.org/api/ngMock/service/%24httpBackend充其量是简洁的:

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

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

// --- SPECS -------------------------
var url = '/path/to/resource';
var result = '';

describe('$httpBackend', function () {

    it("expects GET different results in subsequent requests", inject(function ($http, $httpBackend) {

        successCallback = function(data){
            result = data;            
        }
        // Create expectation
        $httpBackend.expectGET(url).respond(200, 'mock data');

        // Call http service
        $http.get(url).success(successCallback);

        // flush response
        $httpBackend.flush();
        console.log( result ); // logs 'mock data'

        // Verify expectations
        expect( result ).toContain('mock data'); // works as it should

        // reset the expectations
        $httpBackend.resetExpectations();

        // set the fake data AGAIN
        $httpBackend.expectGET(url).respond(200, 'doof the magic cragwagon');

        // get the service AGAIN
        $http.get(url).success(successCallback);
        expect( result ).toContain('doof'); // does not work, result is original result
        console.log( result ); // logs 'mock data'

    }));

});

// --- Runner -------------------------
(function () {
    var jasmineEnv = jasmine.getEnv();
    jasmineEnv.updateInterval = 1000;

    var htmlReporter = new jasmine.HtmlReporter();

    jasmineEnv.addReporter(htmlReporter);

    jasmineEnv.specFilter = function (spec) {
        return htmlReporter.specFilter(spec);
    };

    var currentWindowOnload = window.onload;

    window.onload = function () {
        if (currentWindowOnload) {
            currentWindowOnload();
        }
        execJasmine();
    };

    function execJasmine() {
        jasmineEnv.execute();
    }

})();

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

这是一个缺陷还是我错误地实现了它?


The .resetExpectations()确实按您的预期工作,但您只是忘记刷新第二个请求的 http 请求。

// set the fake data AGAIN
$httpBackend.expectGET(url).respond(200, 'doof the magic cragwagon');

// get the service AGAIN
$http.get(url).success(successCallback);

$httpBackend.flush(); // flush the second http request here

expect( result ).toContain('doof'); // does not work, result is original result
console.log( result ); // logs 'mock data'

JSFiddle 示例: http://jsfiddle.net/4aw0twjf/ http://jsfiddle.net/4aw0twjf/

附言。事实上,$httpBackend.resetExpectations()对于您的测试用例来说不是必需的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何实际重置 $httpBackend 期望? 的相关文章

随机推荐

  • 解析 PHP 中的类、函数和参数

    我想创建一个函数 它接收一个参数 该参数保存 PHP 文件的路径 然后解析给定的文件并返回如下所示的内容 class NameOfTheClass function Method1 arg1 arg2 arg2 private functi
  • sin 和 cos 是如何在硬件上实现的?

    我一直在研究如何计算正弦和余弦 我发现了一些 标准 方法 包括查找表 CORDIC 算法和泰勒级数 我还发现大多数现代处理器都有计算三角函数的汇编指令 我想知道的是这些命令是如何工作的 所以 我的问题是 当前一代处理器使用什么特定算法来计算
  • 有没有办法使用内置的苹果 API 在 mkmapview 中获取方向?

    我知道谷歌地图被认为是最好的地图 但我不想下载一堆额外的库之类的 我更喜欢做一些快速简单的事情来获得从 A 点到 B 点的快速路线并完成它 有没有办法使用内置函数 库来做到这一点 有人能指出我正确的方向吗 EDIT 我并不是想逐个轮流指示或
  • 如何从 Java 字符串中删除空字符 (\0)

    我知道 C 中的这段代码试图删除nul人物 0 来自字符串 string Join mText Split new string 0 StringSplitOptions None 有什么方法可以在 Java 中有效地做到这一点吗 你可以写
  • 对于大 n,java.lang.Math.pow(x, n) 的准确/精确度如何?

    我想计算一下 1 0 p n其中 p 是 0 到 1 之间的双精度值 通常非常接近 0 n 是一个正整数 可能约为数百或数千 可能更大 我还不确定 如果可能的话我想只使用Java的内置java lang Math pow 1 0 p n 为
  • PhantomjsDriver 无法在 Windows 和 Linux 上运行

    我有一个使用 Selenium Webdriver 从站点获取一些信息的应用程序 它在 FirefoxDriver 和 ChromeDriver 上工作得很好 但是当我尝试切换到 PhantomJSDriver 时 我遇到了一些困难 在 W
  • 猫鼬承诺与蓝鸟和打字稿

    我正在使用 nodejs typescript 和 mongodb 数据库开发一个应用程序 为了查询数据库 我正在使用mongoose http mongoosejs com index html 我刚刚读过 mongoose 文档中的一篇
  • 如何在 Swift 中子类化自定义 UIViewController?

    我想创建一个可重用的视图控制器UsersViewControllerBase UsersViewControllerBase延伸UIViewController 并实现两个代表 UITableViewDelegate UITableView
  • 如何知道 spring 生成的 bean 中的 bug 行?

    我有一个使用 Spring 和 jpa 由 hibernate 构建的网站 我遇到了错误 但我不知道如何识别错误出现的行 我无法在我的IDE上调试它 因为它是实时版本 在本地一切运行良好 我有日志说 哦 rg springframework
  • Bash:导出未将变量正确传递给父级

    子脚本中导出的变量在父脚本中未定义 a sh bin bash This is the parent script a sh export var 5e 9 b sh var export result res res is defined
  • 与 SQL 的时区协调

    问题1 3 我有多个MySQL要连接的数据库并希望确保查询之间的时间一致性 例如 其中一台服务器当前位于CDT时区 gt select CURRENT TIMESTAMP system time zone global time zone
  • Xcode:避免使用 Interface Builder 是好主意还是坏主意? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在慢慢学习如何在 Xcode 和 Objective C 中构建应用程序 并且我一直在阅读这篇博文 http blog teamtreeho
  • Rails:使用 CanCan 根据单个模型的实例定义多个角色?

    我目前陷入如何根据我们想要的每个条件来分离 CanCan 角色的问题 在我们的应用程序中 有很多类别 例如数学 英语 历史等 每个类别都有很多课程 每个用户可以在每个类别上拥有许多不同的角色 例如 约翰可以是数学 读者 这意味着他可以阅读数
  • 在 C# 中分割、编码和合并视频部分

    可以将文件分成许多部分 是否可以对每个部分进行编码 然后再次将它们连接起来 这个想法是在多台计算机上对一个视频进行编码 在 NET中 谢谢 您可以从 C 代码中调用 ffmpeg exe 来完成此操作 还有一些库可以完成此任务
  • SNMP:ifAdminStatus 与 ifOperStatus

    我有关于 ifAdminStatus 和 ifOperStatus 的问题 以下是使用 ifAdminStatus 的网络接口状态的输出 snmpwalk Os c public v 1 192 168 1 1 1 3 6 1 2 1 2
  • 通过扩展 Django-Registration 应用程序创建 Django 注册表单

    我尝试通过扩展 django registration 应用程序并使用 Django Profile 创建注册表单 我已经为配置文件创建了模型和表单 当我通过 django shell 检查时 它正在生成字段 对于配置文件字段 我使用 Mo
  • 在续集中的嵌套急切加载中排序不起作用

    我有四个模型 Tehsil Ilr Patwar 和 Village 他们的关联是 Tehsil gt 1 m gt Ilr gt 1 m gt Patwar gt 1 m gt 村庄 我想在我的所有四个模型上应用 order by Que
  • 使用 Android Studio 和 Facebook 4.6.0 膨胀类 com.facebook.login.widget.LoginButton 时出错

    在我的 build gradle 中 我正在导入 Facebook compile com facebook android facebook android sdk 4 6 0 在我的应用程序类中 我正在初始化 Facebook SDK
  • MySQL中反斜杠\算作一个字符吗?

    如果我有一个包含固定长度列的表 mySQL 会将反斜杠算作字符吗 例子 people name 10 age 3 如果我在名称列中存储 MySQL 转义值 例如 Blahblah sMySQL会按照报价砍掉它吗 Thanks 不 转义字符不
  • 如何实际重置 $httpBackend 期望?

    我已经尝试过并试图让它发挥作用 这文档 https docs angularjs org api ngMock service 24httpBackend充其量是简洁的 重置期望 重置所有请求期望 但保留所有后端定义 通常 当您想要重用 h