AngularJS,防止在茉莉花测试期间启动控制器上的 init 方法

2024-02-09

我有一个带有在实例化时启动的 init() 方法的控制器。 它做了很多对我的应用程序在实时环境中有用的事情,但这会扰乱我的单元测试间谍。

在单元测试环境中实例化控制器时,有没有办法阻止它的调用? 或者也许有一种方法可以在 web 应用程序上下文中自动调用它,而无需在控制器代码末尾显式调用 init() ?


在没有看到实时代码示例的情况下提供精确的指导有点困难(这就是为什么提供一个具有 Jasmine 测试模板的 plunk 通常是一个好主意),但这听起来像是您的init方法执行一些设置逻辑,这些逻辑应该根据环境而有所不同。如果是这样,前进的方法是将这个初始化逻辑封装到一个专用服务中,并在测试期间模拟该服务(这正是 @Joe Dyndale 所建议的)。

假设您的控制器如下所示:

app.controller('MainCtrl', function($scope) {
  $scope.init = function() {
    //something I really don't want to call during test
    console.log("I'm executing");
  };
});

它可以重构为:

app.factory('InitService', function() {
  return {
    init = function() {
      //something I really don't want to call during test
      console.log("I'm executing");
    }
  };
});

app.controller('MainCtrl', function($scope, InitService) {
  InitService.init();
});

然后模拟测试可能如下所示:

describe('Testing an initializing controller', function() {
  var $scope, ctrl;

  //you need to indicate your module in a test
  beforeEach(module('plunker'));
  beforeEach(module(function($provide){
    $provide.factory('InitService', function() {
      return {
        init: angular.noop
      };
    });
  }));
  beforeEach(inject(function($rootScope, $controller) {
    $scope = $rootScope.$new();
    ctrl = $controller('MainCtrl', {
      $scope: $scope
    });
  }));

  it('should test sth on a controller', function() {
    //
  });
});

Finally here http://plnkr.co/edit/fgZMJNfPQeKLt0IEva7d?p=preview是 plunker 中的实时代码

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

AngularJS,防止在茉莉花测试期间启动控制器上的 init 方法 的相关文章

  • 如何更改 angularjs $http.jsonp 的标头

    我读了document http docs angularjs org api ng 24http 但我想我一定是误解了 http defaults headers jsonp Accept application json http js
  • 从 Angular Controller 调用节点函数的常用方法

    让我在这之前加上我是 Node Express 新手 我有一个 AngularJS 应用程序 它利用 Node JS 来管理 Azure Blob 需求 例如创建 Blob 容器 如下所示 function test containerNa
  • 构造函数上的分支未涵盖

    我正在使用 Jasmine 创建单元测试 我对所涵盖的分支有疑问 有谁知道为什么代码部分显示分支没有被覆盖 如下所示 这是单元测试 describe MyComponent gt let component MyComponent let
  • JSON 数据的动态表单(不同类型)

    我尝试使用 JSON 中的数据在 AngularJS 中创建动态表单 我有这个工作 HTML p p
  • std::queue 初始化为 NULL

    是否可以初始化一个C std queue with a NULL像其他变量一样的值 像这样 HANDLE variable NULL class Test i e std queue
  • Angularjs $http 等待响应

    我是 javascript angularjs 的新手 我想在某些元素上完成鼠标悬停时显示引导弹出窗口 我为此创建了一个指令 function angular app app directive popOver window http fu
  • 如何理解 EMCA 335 中有关“.locals init”的这些段落?

    来自 ECMA 335 I 12 4 1 方法调用 局部变量数组对于对象类型始终为 null 对于 保存对象的值类型中的字段 另外 如果 locals init设置后 局部变量数组初始化为0 对于整型类型为 0 0 对于浮点类型为 0 0
  • Windows 7 机器上的 MongoDB:无法建立连接

    在 Windows 7 机器上使用 mongod exe 启动 Mongo 后 我尝试启动 mongo shell 但失败并出现以下错误 无法连接到 127 0 0 1 27017 原因 errno 10061 否 由于目标机器主动拒绝而无
  • 角度 ui 路由器的动态参数

    我想知道在更改状态并发送请求以从后端获取模板时如何包含参数 这是我的应用程序 angular module questionnaireApp ngAnimate ui router ui bootstrap config stateProv
  • 为 HTML5 Django Web 应用程序实现实时通知系统

    我目前正在开发一个由 Django apache 提供服务的 HTML5 Web 应用程序 该应用程序的目标是监视多个设备 所有客户端逻辑都是用 Angular 编写的 所有数据都来自对后端进行的基于 JSON 的类似 REST 的调用 我
  • 如何使用 ng-if 测试变量是否已定义

    有没有办法使用ng if测试变量是否已定义 而不仅仅是它是否为真 在下面的示例中 现场演示 http plnkr co edit jKPN0dOHDWBtPxJHXv2R p preview HTML 仅显示红色商品的运费 因为item s
  • 如何识别 YouTube 播放器的音量变化

    我正在使用 angualr youtube embed 指令将 YouTube 播放器嵌入到我的 Angular Web 应用程序中 因为我必须识别播放和暂停以及音量变化事件 为了监听播放和暂停事件 我使用下面给出的代码 scope on
  • 将行推入使用 ng-repeat 以角度呈现的表格中

    当客户端单击该行时 我想在表中插入额外的行 不应预取数据 因为我预计最多有 30 行 但每行都有关联的数据 在一次获取中获取这些数据是不合理的 到目前为止 我的方法是使用 ng repeat 迭代我的集合并渲染表格 当客户端按下该行时 客户
  • Angular JS 在调用新的 $http 之前取消 $http 调用

    在 Angular JS 1 1 5 中 您可以取消之前启动的 http 调用 这两个link1 https stackoverflow com questions 16962232 in angularjs how to stop ong
  • Angular 1.0.8 $resource 具有多个可选的获取参数

    我的学生 url 如下所示 var Student resource app student studentid courseId studentid id courseId cid 当我不带参数调用它时 我希望 url 为 app stu
  • 包含routeChangeSuccess的AngularJS测试控制器

    我正在尝试创建单元测试来测试导航列表控制器 但在创建测试时遇到问题 这是控制器的代码 navListModule controller NavListCtrl scope NavList function scope NavList sco
  • 从指令动态地将角度属性添加到元素

    我正在尝试构建一个指令来更改缓慢的 ajax 调用按钮上的加载状态 基本上 这个想法是为按钮元素设置一个属性 ng loading 并让指令添加其余的内容 这是html代码
  • 在角度控制器中监听文档事件

    如何捕获角度控制器中的事件 我有文档级事件 所以我需要在角度控制器中捕获事件 这可能吗 Update 我有独立的 js 文件来处理来自相机的一些操作 document addEventListener myCameraEvent handl
  • 在 Angular e2e 测试中获取浏览器路径会导致异常

    我有一个简单的 e2e 测试来验证路由重定向是否有效 跑步者 html 场景 js use strict describe e2e function beforeE
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下

随机推荐

  • 声明字符串 public static readonly 与 public const 与 public static const

    在每个项目中 我们都有一个文件用于存储该项目中使用的各种 SQL 语句 类的声明方式和字符串的声明方式有一些变化 类声明示例 internal sealed class ClassName internal static class Cla
  • 在RESTLET中读取Web-INF中的配置文件

    我正在尝试读取放置在 WEB INF 根路径内的配置文件 该应用程序使用RESTLET框架 我在官方RESTLET上读到doc http restlet com technical resources restlet framework j
  • 使用 JSON.NET 反序列化 Noda Time 的 LocalDateTime

    我正在尝试使用 Json NET 序列化一些 Noda Time 值 但遇到了麻烦 序列化很简单 LocalDateTime dt Assigned elsewhere LocalDateTimePattern isoDateTimePat
  • 如何使用 H2、JPA 和 Hibernate 映射 JSON 列

    我在应用程序 MySQL 5 7 中使用 并且有 JSON 列 当我尝试运行集成测试时 它不起作用 因为 H2 数据库无法创建表 这是错误 2016 09 21 16 35 29 729 ERROR 10981 main org hiber
  • RxJS / Angular Observables 使用 1 个还是多个管道?

    具有以下内容 只是一个简单的示例 observable pipe map s gt s anything pipe filter t gt t gt 5 pipe map t gt t 5 subscribe XXX 为什么我应该使用 1
  • 在 Hibernate 3.3.1ga 和 HSQLDB 中使用 @Table 和架构名称

    如何使用 Hibernate 3 3 1ga 和 HSQLDB 在单元测试中实现此功能 Entity Table name CATEGORY schema TEST public static class Category 问题是 Hibe
  • 图像二进制解释:未知图像格式

    假设我有某种格式的图像 其二进制表示形式 例如来自 OpenCV 的 cv Mat 或来自 Android 的 YuvImage 未压缩 并将其数据解释为 YUV NV21 嗯 这是 DJI 提供的示例 SDK 差不多了 这是我所得到的 由
  • 如何从抽象基类覆盖模型字段的默认值

    我有一些代码 如下所示 class BaseMessage models Model is public models BooleanField default False some more fields class Meta abstr
  • 从 Clojure 映射中过滤 nil 值?

    最好的过滤方法是什么nilClojure 映射中的值 a x b nil c z gt a x c z 我会用 into filter comp some val a x b nil c z gt a x c z 正在做的some http
  • C++中传递成员函数指针

    我正在尝试传递一个函数指针 类型为QScriptEngine FunctionSignature QScriptValue QScriptContext QScriptEngine 到另一个函数 但我需要传递的函数是类的成员函数 我这样使用
  • 网络x绘制_网络x_边缘capstyle

    有谁知道在通过 例如 绘制networkx边缘时是否可以对线条属性进行细粒度控制draw networkx edges 我想控制线路solid capstyle and solid joinstyle 它们是 matplotlib Line
  • 选择 Atom 中所有找到的 RegEx 结果

    我正在尝试选择正则表达式查找找到的所有结果 以便我可以全部修改它们 不要用文本替换它们 例如 将它们全部大写Cmd K gt Cmd U 我知道我could通过重复来一项一项地做Cmd G Cmd K Cmd U 但对于大文件来说 这根本不
  • Laravel 4 绕过路由的维护模式

    我已将我的应用程序放下以进行维护php artisan down命令 我的自定义维护页面作为电子邮件输入 用于接受来自用户的电子邮件并存储在我的数据库中 以便在站点备份并再次运行时通知用户 但是当我使用 POST 提交表单时 我被重定向到维
  • mViewPager.getCurrentItem() 不返回第一个和最后一个寻呼机的正确位置

    我正在尝试获取视图寻呼机的页码 我遇到了很多Stackoverflow Q A 他们都说要使用 currentposition mViewPager getCurrentItem 但此方法不适用于第一页和最后一页 如何解决这个问题 提前致谢
  • 运行 Hadoop 作业时不是有效的 Jar

    我想运行 WordCount 示例 在eclipse中运行正确 在输出文件夹中存在输出文件 我制作了WordCount的jar文件并想通过命令运行它 hadoop jar WordCount jar Projects input Proje
  • 使用index.js在React中导入多个图像资源

    我一直在使用一种收集组件文件以供导出的模式index js文件放置在目录中 例如 index js file in components directory export Splash from Splash export Portfoli
  • 使用 Spring Boot 重命名 Liquibase 变更日志表

    我在用着Liquibase v 3 5 3 和 一起Spring 启动 v 1 5 3 我想使用 spring boot 属性文件更改 liquibase 变更日志表名称 我发现做到这一点的唯一方法是设置liquibase database
  • 找到具有相同权重的最大边数的生成树

    问题就在这里 给出一个带权无向连通图G 权重是恒定的 任务是提出一种算法 找到满足这两个条件的 G 的生成树的总权重 按优先级排序 生成树必须有相同权重的最大边数 与实际重复重量值无关 应最小化总生成树重量 这意味着 例如 权重为 120
  • 为什么.NET不验证BCL/CLR?

    BCL 和 CLR 中的所有 NET 程序集 以后仅使用 CLR 都是强命名和数字签名 https stackoverflow com questions 1334631 signing of net assemblies 提供数字证书是为
  • AngularJS,防止在茉莉花测试期间启动控制器上的 init 方法

    我有一个带有在实例化时启动的 init 方法的控制器 它做了很多对我的应用程序在实时环境中有用的事情 但这会扰乱我的单元测试间谍 在单元测试环境中实例化控制器时 有没有办法阻止它的调用 或者也许有一种方法可以在 web 应用程序上下文中自动