使用 $http 单元测试 Angular 指令

2024-02-16

我有一个 Angular 指令,当附加到<input>,在用户输入后等待一秒,然后再使用 $http 查询端点。简而言之,它的目的是检查用户名的唯一性。

它看起来像这样:

.directive('sgValidUsername', ['$http', function(http) {
    var waitTimer;
    var checkIfUserExists = function(e, ctrl) {
            http.get('/publicapi/users/' + e.target.value + '/exists')
                .success(function(data) {
                    ctrl.$setValidity('unique', !data.exists);
            });
        };

    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, element, attrs, ctrl) {
            element.on('blur keyup', function(e) {
                if (e.target.value) {
                    clearInterval(waitTimer);
                    waitTimer = setTimeout(function() {
                        checkIfUserExists(e, ctrl);
                    }, 1000);
                }
            });
        }
    };
}]);

我正在尽力编写一个良好的综合 Jasmine 单元测试套件,但它没有成功,因为我找不到合适的示例来学习。我最终以测试形式重建指令,而不是实际测试指令。另外,我收到“没有待处理的刷新请求”错误。

对于以下内容有什么建议吗?

describe('SignupForm directives', function () { 
    var form,       // el to which directive is applied
    $scope,
    $httpBackend, // $http mock
    usernameExistsHandler;

beforeEach(function() {
    module('signupform.directives');
});

beforeEach(function() {
    inject(function ($injector, $rootScope, $compile, $q, $timeout) {
        $scope = $rootScope;
        $httpBackend = $injector.get('$httpBackend');
        usernameExistsHandler = $httpBackend.whenGET(/\/publicapi\/users\/.+?\/exists/);
        var el = angular.element('<form name="form"><input type="text" name="username" ng-model="user.username" sg-username-is-valid /></form>');

        $scope.user = { username: null };
        $compile(el)($scope);
        form = $scope.form;
    });
});

afterEach(function() {
 $httpBackend.verifyNoOutstandingExpectation();
 $httpBackend.verifyNoOutstandingRequest();
   });

   it('should invalidate with existing usernames', function() {
    form.username.$setViewValue('username_in_use');

    $scope.$digest();

    expect($scope.user.username).toEqual('username_in_use');

    usernameExistsHandler.respond('200', { exists: true });
    $httpBackend.expectGET('/publicapi/users/' + $scope.user.username + '/exists/');
    $httpBackend.flush();

    expect(form.username.$valid).toBe(false);
   });

None

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

使用 $http 单元测试 Angular 指令 的相关文章

  • Chrome 打包应用程序 - 在后台/事件页面中使用 AngularJS

    当我们创建 Chrome 应用程序时 我们将脚本放在背景属性中清单 json file 这将用作应用程序的背景 事件页面 我想要的是 我想使用 AngularJS后台脚本但我不知道怎么办 还有 这可能吗 我刚看到一些答案 https sta
  • 将复杂对象传递给 ui-sref 参数

    我需要这样的构建网址 列表 过滤器 状态 1 过滤器 类型 2 I do link a List a 在参数中传递复杂对象 如果传递简单对象 filter 1 可以 但我需要这个 state state list url list filt
  • Angular 中的单元测试点击事件

    我正在尝试将单元测试添加到我的 Angular 2 应用程序中 在我的一个组件中 有一个带有 click 处理程序 当用户单击按钮时 将调用在中定义的函数 ts类文件 该函数在 console log 窗口中打印一条消息 表明该按钮已被按下
  • 使 WebAPI 操作异步?

    我有一个问题 关于在 WebAPI MVC 控制器 AJAX 请求上使用 async await 是否有益 假设我有一个与 Web API 后端对话的 AngularJS 应用程序 并且我想获取一些数据 我对 Web API 进行了一些 A
  • 使用 ng-if 内容短暂呈现然后消失

    我的页面上有一些内容包含在 ng if 中 如下所示 div class text danger p strong Message displayed to User strong p div 然后在我的 Angular js 控制器中我有
  • 身份验证在不应该返回“401(未经授权)”时返回

    我第一次设置身份验证功能 在用户登录后得到了一些意外的结果 一位同事给了我一个具有工作身份验证的应用程序 以模仿我的应用程序 看起来我所做的一切都是正确的 我在前端使用 AngularJS 在后端框架使用 SailsJS 并且护照JS ht
  • Protractor addMockModule 附加参数不起作用?

    这看起来非常非常简单 但我不明白为什么这个简单的代码不起作用 我正在添加一个模拟模块来在 Angular E2E 测试中模拟我的 API 后端 我正在使用量角器 1 6 0 我需要将附加参数传递给模拟模块 根据 Protractor 文档
  • 未捕获的引用错误:在 karma start karma.conf.js 上未定义 require

    使用 Karma 和 Jasmine 对 Rails 应用程序的 Angular 前端进行单元测试 看来我已经做了所有已知的事情来解决这个错误 并且我的 package json 中留下了一百万个依赖项 这是我的 Karma conf js
  • AngularJS 中“href”和“ng-href”的区别

    我都用过href and ng href我看不出它们之间的区别 为什么 Angular 有ng href属性 什么时候应该使用它 从文档中 https docs angularjs org api ng directive ngHref 使
  • 如何在 AngularJS 中滚动到页面顶部?

    我想在使用 angularjs 获得 ajax 调用响应后滚动到页面顶部 基本上 我在页面顶部显示警报消息 并且希望在收到 ajax 响应时将警报消息集中显示 Thanks 您可以使用 window scrollTo x y where x
  • 动态分配 ng-model

    我正在尝试从对象数组生成一组复选框 我的目标是让复选框动态地将其 ng model 映射到将提交到数组中的新对象的属性 我的想法是这样的 li li
  • Angularjs 循环遍历 $http.post

    当我循环遍历 Angularjs 的 http post 服务时 for var i 0 i lt scope tagStyles length i scope profilTag tag scope tagStyles i id tag
  • Protractor:单击按钮后如何等待页面完成?

    在测试规范中 我需要单击网页上的按钮 然后等待新页面完全加载 emailEl sendKeys jack passwordEl sendKeys 123pwd btnLoginEl click Here need to wait for p
  • AngularJS - 在等待数据/数据计算时加载图标

    我有一个简单的 Angular http get app factory countriesService function http return getCountryData function done http get resourc
  • Jasmine JavaScript 测试 - toBe 与 toEqual

    假设我有以下内容 var myNumber 5 expect myNumber toBe 5 expect myNumber toEqual 5 上述两个测试都会通过 之间有区别吗toBe and toEqual 当谈到评估数字时 如果是这
  • 如何在输入框中应用多个 ng-pattern 或条件

    条件第一 a zA Z 5 d 4 a zA Z 1 条件二 a zA Z 4 0 9 5 a zA Z 1 g html
  • 页面点击其他路径后 $timeout 继续运行

    我在用yo angular fullstack生成器来构建我的网站 当用户注册该网站时 它将发送一封带有链接的激活电子邮件 当用户点击该链接时 会显示激活成功并超时进入主页 但是 当超时未结束 用户点击页面中的任何其他链接时 会跳转到其他页
  • 如何为 ng-repeat orderBy 创建回调?

    寻找一种方法让 AngularJS 的 ng repeat orderBy 过滤器在完成渲染后执行回调 Markup div table thead tr th Name th th Age th tr thead tbody tr tr
  • 获取 Angular ng-option 下拉列表的选定文本

    我的角度代码中有这个下拉列表 div class btn group div
  • 调整离子卡中的图像大小

    我想显示一组图像 并在下面说明 我选择使用 Ionic 卡 我得到这个结果 第一张图片 虽然我想保留现在的相同布局 并添加描述 这是我的代码

随机推荐

  • 如何使条形图自动在不同颜色之间循环?

    In matplotlib 自动绘制颜色循环线 这两条线图将具有不同的颜色 axes plot x1 y axes plot x2 y 然而 条形图则不然 这两个数据系列都有蓝色条 axes bar x1 y axes bar x2 y 如
  • 使用 Perl,如何用逗号替换换行符?

    我放弃了 sed 我听说 Perl 中的它更好 我想要一个可以从 unix 命令行调用并转换 DOS 行结尾的脚本CRLF来自输入文件并在输出文件中用逗号替换它们 like myconvert infile gt outfile 其中 in
  • 警告:解析“显示”值时出错。宣言落空。线路:0

    警告 解析 显示 值时出错 宣言落空 线路 0 我不确定当我留下此警告时会发生什么 因为我在任何页面中都没有看到任何奇怪的行为 我还是想删除它以防万一 有人可以帮我尝试找到解决方案吗 谢谢 EDIT 我刚刚注意到我的 php 脚本中有一个错
  • 在 Eclipse 中抑制 FindBugs 警告

    我使用字符串作为锁 因此想确保该对象是一个新实例 FindBugs 抱怨是因为直接定义字符串 使用双引号 通常更有效 我的代码如下所示 A lock for the list of inputs edu umd cs findbugs an
  • System.Web.HttpException:无法在 DropDownList 中选择多个项目

    在页面加载期间 索引 0 已被选择 然后这段代码语句选择了索引1 dropDownList Items FindByValue myValue Selected true assume myValue is found at index 1
  • XAMPP:如何升级 PEAR

    尝试升级 XAMPP pear 时出现以下错误 Fatal error Cannot use result of built in function in write context in C xampp php pear Archive
  • 干净架构中从网关到框架的依赖关系

    假设我想要实现一个基于 Uncle Bobs Clean Architecture 的 ASP NET 应用程序 据我了解 Asp Net 本身将属于框架圈 Asp Net 控制器位于网关 接口适配器层 我的业务逻辑将位于用例 实体层 依赖
  • NoSQL 数据库 - 日志处理/聚合和汇总的良好候选者? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将自定义元素添加到 ngRepeat 列表

    我正在使用 cordova onsenui angularJs 开发一个移动应用程序 并且对填充 ngRepeat 列表有特殊要求 有些项目可能有附加参数 在这种情况下 我想显示项目的附加信息 完全用新的替代模式 或在下面附加一个新的自定义
  • 两位数[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • Javascript/Jquery:使用数字范围验证输入

    我想验证预先配置的数字范围内的输入字段 只允许使用 1 到 24 之间的数字 我能怎么做 使用这样的自定义解决方案 field keypress function event var val parseInt this val HERE I
  • 在具有缩放事件的 内的两个元素之间放置一条线?

    我有这段代码 并且我有一个算法可以将线放在两个之间nodes 我想要这条线加入 nodo4与 nodo6 the rectangles是nodes并且每个都有与其相同的名字id 代码有点长 但实现这一点的重要部分在这里 setTimeout
  • PyPlot 图例:“Poly3DCollection”对象没有属性“_edgecolors2d”

    以下代码片段工作正常 直到我取消注释plt legend line import numpy as np import matplotlib pyplot as plt from mpl toolkits mplot3d import Ax
  • 如何在打字稿中声明公共枚举?

    对于以下课程 module LayoutEngine enum DocumentFormat DOCX 1 export class DocHeader public format DocumentFormat 我有两个问题 上面有一个编译
  • XST - 使用调用模板的输出作为返回值

    假设我有一个模板foo它可以输出给定参数的东西 现在我想使用该输出作为我的其他模板的参数 loop所以我可以循环输出一定次数 我一路上尝试过一些事情
  • 如何排除表单子类中 ModelForm 中声明的字段?

    在 Django 中 我试图从中派生 子类 一个新形式ModelForm我想删除一些字段 或者只包含一些字段 更正确 当然 显而易见的方法是 基本形式来自django contrib auth forms class MyUserChang
  • 如何以编程方式检查Android设备是否支持OTG功能

    我想以编程方式检查设备是否支持 OTG 功能 我在互联网上尝试了很多相关内容 但找不到任何东西 我怎样才能做到这一点 感谢 CommonsWare 如何检测Android是否完全支持USB https stackoverflow com q
  • ios 区分主页按钮点击和来电?

    是否有任何解决方案可以区分手动退出应用程序 通过单击主页按钮 和通过来电退出应用程序 请帮忙 是的 有点像 单击主页按钮或关闭屏幕将导致您的应用程序进入后台 applicationDidEnterBackground 而电话则不会 只会让您
  • 安装 Ruby 后,MAC OS X 上的活动开发人员路径无效

    我收到此错误 xcrun 错误 无效的活动开发人员路径 Applications Xcode app 缺少 xcrun 位于 Applications Xcode app usr bin xcrun This solution https
  • 使用 $http 单元测试 Angular 指令

    我有一个 Angular 指令 当附加到