如何使用 jasmine 测试 IIFE 中定义的 angularjs 模块?

2024-01-04

如何在 jasmine 上测试这个模块? 问题是测试起来非常困难$controller因为函数隐藏在闭包内,所以测试它们非常困难。

换句话说,考虑到下面的模块定义,为 MainCtrl 编写单元测试似乎是不可能的。

(function () {

    'use strict';

    angular.module('app', []);

    function MainCtrl() {
      var mc = this;
      mc.obj = {
        val : 50  
      };
    }

    angular.module('app').controller('MainCtrl', MainCtrl);

} () );

和“典型”茉莉花测试

describe('app', function(){

  beforeEach(module('app'));

  it('should create an objet with val 50', inject(function(_$controller_) {
    var scope = {},
        ctrl = _$controller_('MainCtrl', {$scope:scope});

    expect(scope.obj.val).toBe(50); // returns Expected undefined to be 50.
  }));

});

当有角度注入时_$controller_在 jasmine 测试函数内的服务中,创建的控制器实例返回未定义的 $scope。

那么如何测试呢?

我在 StackOverflow 上搜索此问题的解决方案,但没有给出我正在寻找的答案,因此我实现了自己的解决方案。


只需执行以下操作即可使用 jasmine 对其进行测试:

describe('app', function () {

    var $controller;

    beforeEach(function () {

        module('app');

        inject(function (_$controller_) {

            $controller = _$controller_('MainCtrl');

        });
    });

    //-- spec - test controller

    describe('Controller : MainCtrl', function () {

        it('should create an object with val 50', function () {

            expect($controller.obj.val).toBe(50);

        });
    });

});

这是一个jsfiddle http://jsfiddle.net/jfabfab/g3a6hxmx/ for it

希望能帮助到你 !

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

如何使用 jasmine 测试 IIFE 中定义的 angularjs 模块? 的相关文章

  • 我可以从 HTTP 请求中找到无线接入点的 BSSID(MAC 地址)吗?

    假设有人在咖啡店里无线连接到互联网 并向 johnsveryownserver com 发送 HTTP 请求 服务器端 有什么方法可以确定我的MAC地址吗 无线接入点他们连接到什么 请注意 我对他们机器的 MAC 地址不感兴趣 如果我无法使
  • Ext JS - 如何滚动到文本区域的底部

    这是我下面的代码 如何滚动到文本区域的底部 它一定是类似的东西 Ext getCmp output setScrollPosition Ext getCmp output getScrollHeight 这是我的文本区域代码 var myW
  • 如何将中间件绑定到socket.io中的事件

    现在您可以将中间件绑定到io use middleware 但这仅在建立套接字连接时触发 有没有办法在将其传递给事件句柄之前拦截它 就像在expressjs中一样 换句话说 In 快递 js你可以做 app get middleware1
  • 在浏览器中语音聊天? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们正在寻求建立一个小组 voice 使用服务器上的node js 在浏览器中聊天 这可能吗 如果您希望您的解决方案是基于服务器端和客
  • ElectronJS ReferenceError:导航器未定义

    我正在尝试在电子上制作自定义标题栏 但是当我启动我的应用程序时 我遇到了 ReferenceError 导航器未定义 问题 请帮忙 这是我的 main js 中的代码片段 My Codes https i stack imgur com c
  • 在 MVC Razor 中的 C# 和 Javascript 之间共享常量

    我想在服务器上的 C 和客户端上的 Javascript 中都使用字符串常量 我将常量封装在 C 类中 namespace MyModel public static class Constants public const string
  • 如何使用 jQuery 向表中添加新行,并为其分配递增的 id

    我有一个现有的 HTML 表格 它是用户输入 GPS 点的表单的一部分 用户还可以选择上传 GPS 数据点 我想要一个用户可以按下的按钮 其中一些 Javascript 会向表中添加一个或多个新行 但新行必须继续增加表中使用的名称和 id
  • 使react-leaflet能够离线使用

    我一直在使用反应传单 https github com PaulLeCam react leaflet图书馆 到目前为止运作良好 现在我希望网站预加载尽可能多的图块 以便网络应用程序 也是 PWA 可以在没有互联网的情况下使用 我找到了一些
  • pytest:同一接口的不同实现的可重用测试

    想象一下我已经实现了一个名为的实用程序 可能是一个类 Bar在一个模块中foo 并为其编写了以下测试 测试 foo py from foo import Bar as Implementation from pytest import ma
  • 使用 jquery 将字符串数组转换为整数

    我正在尝试将 jquery 中的字符串数组转换为整数数组 这是我的尝试 var cdata data values split each cdata function i l l parseInt l 我认为在这种情况下你不需要使用 Jqu
  • 如何滚动到div内的元素?

    我有一个滚动的div我想在点击它时发生一个事件 它会强制执行此操作div滚动以查看内部元素 我写的JavasCript是这样的 document getElementById chr scrollIntoView true 但这会在滚动时滚
  • 如何访问另一个 mobx 商店中的 mobx 商店?

    假设以下结构 stores RouterStore js UserStore js index js each of Store jsfiles 是一个 mobx 存储类 包含 observable and action index js只
  • ng-model 和值组合不适用于输入文本框

    我有两个输入文本框 我需要组合在两个文本框中输入的值并将其显示在第三个文本框中 如果我只使用value在第三个文本框中 Box 1
  • 如何获取使用 .map 渲染的第一个元素的 ref?

    我需要在几行中显示视频 卡片 的缩略图 并重点关注第一个缩略图 我使用嵌套地图进行了显示 该代码基本上迭代视频数组并返回多行视频 我们如何关注第一个渲染的元素 我认为我们需要获得第一个要聚焦的元素的引用 但是我们如何在这里设置 ref 并在
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • 在javascript中动态生成行?

    我是 javascript 新手 我想在按下 Tab 时动态生成行 并希望获取在动态生成的行中输入的值 以便我可以在 servlet 代码中使用这些值 这是我的html
  • Express.js Passport认证自动失败跳过策略

    UPDATE 我已将代码从护照本地注册内部移至单独的处理程序 并且运行良好 问题在于 Passport 和本地注册的使用 但我不知道为什么 我使用 Node js Express Passport 进行身份验证和注册设置 这是以前使用过的标
  • Restangular - _.contains() 不是一个函数

    如果您最近通过 Bower 更新了 Restangular 它将安装最新的 Lodash 新的 4 0 然而 这是一个问题 因为 Restangular Angular 现在会抛出错误 contains 不是函数 你怎么解决 解决方案非常简
  • 我可以使用 jQuery 动态创建文件(及其内容)吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这是我的 HTML 代码 ul li
  • 如何更改订阅值?使用 rxJS

    我正在创建一个计时器 需要你的帮助 我刚刚学习 Angular 和 rxJS 对此我有一些疑问 我正在创建一个具有启动 停止 暂停 重置功能的计时器 并且 btn Reset 必须将我的计时器 暂停 到 300 毫秒 怎么做 D 我的启动定

随机推荐

  • 如何限制DownloadString(url)允许的时间为500毫秒?

    我正在编写一个程序 当 textBox1 更改时 URL http example com something URL System Web HttpUtility UrlEncode textBox1 Text s new System
  • 使用 PHP 填写 PDF 表单 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • DISTINCT 包含两个 array_agg (或一个包含元组的 array_agg)?

    我有以下查询 SELECT DISTINCT ON ps p m groundtruth ps p ARRAY AGG m anchor id ARRAY AGG m id FROM measurement m JOIN SELECT un
  • 修复应用恢复执行后通知中心方向

    我有一个仅以横向模式显示的视图 并且运行良好 但是 如果您将应用程序发送到后台然后恢复它 通知中心将按照您恢复应用程序时设备的方向显示 通常是纵向模式 因此当我检测到从左向右滑动时 通知中心有时会显示会出现 有什么想法可以让系统知道它应该以
  • VBA HTTP GET 请求 - 带冒号的 cookies

    我正在尝试在 VBA 中发送 HTTP GET 请求 其中包含一个包含冒号字符的 cookie 如下所示 objReq Open GET http my url com foo bar False objReq setRequestHead
  • 将值从一个输入字段复制到另一个输入字段

    我需要一个 javascript 函数来根据复选框选择将一个输入字段的值复制到另一个输入字段 不过我在点击时做了一些javascript代码
  • Cap 部署 - 错误:未找到存储库

    我继承了一个项目 并且对开发方面感到满意 但系统操作员很差劲 而且 Capistrano 部署失败了 对于之前的开发人员已经部署过的项目 cap deploy check 运行良好 导致 You appear to have all nec
  • 正则表达式在bash中提取冒号后的字符串

    我需要提取后面的字符串 在下面的例子中 package project abc def 我会去哪里project abc def因此 我正在 bash 中尝试这个 我相信我有一个可以工作的正则表达式 在我的 bash 脚本中package
  • Python Wand 将 tiff 更改为 min-is-white

    我需要将文件转换为 tiff 其中光度设置为 min is white 白色为零 以符合所需的标准 我正在使用 Wand 与 Photomagick 交互 但每次保存双层 tiff 文件时 它都会创建一个 min is black 我怎样才
  • 正则表达式:如何选择在开头或结尾匹配某些内容,但不能同时匹配两者?

    我遇到的情况是正则表达式是这样的 b A b So b may在字符串开头匹配 0 或 1 次 并且A must匹配一次或多次 再次b may在字符串末尾匹配 0 或 1 次 现在我想修改这个正则表达式 使其可以匹配b位于字符串的开头或结尾
  • 如何在 Wayland 中设置窗口的 x,y 坐标?

    显然 这不是核心 Wayland 协议的一部分 但我正在使用 Weston 并且 xdg shell 扩展似乎具有必要的方法 xdg surface set window geometry 所以我跑了wayland scanner创建 xd
  • Perl 术语::ReadLine::Gnu 信号处理困难

    我正在使用 Term ReadLine Gnu 并且遇到了信号处理问题 给定下面的脚本和发送到脚本的 TERM 信号 TERM 信号的处理程序不会被触发 直到after按下回车键 使用 Term ReadLine Perl 不会发生这种情况
  • 我应该在 JavaScript 中使用大型 switch 语句而不出现性能问题吗?

    我用谷歌搜索了一下 但我仍然感到迷失 我正在用 JavaScript 编写一个 CPU 模拟器 目前在我的例子中是 Z80 它的内心有一个巨大的switch语句 虽然我当然可以运行一些基准测试 但我无法确定不同浏览器的未来 JavaScri
  • Libgdx 游戏 - 纹理缩放

    我正在使用 LibGdx 为 Android 设备开发一个简单的游戏 我希望通过放大 缩小纹理来显示进度条 当我们进行缩放时 图像的形状会发生变化 您能否让我知道实现下面提到的场景的最佳方法 Scale up is fine Scale d
  • jQuery AJAX 和 JSON 格式

    我有一个希望接收 JSON 的 Web 服务 如下所示 first name test last name teste email email protected cdn cgi l email protection mobile 44 2
  • 如何安装“不可安装”依赖项?

    我正在尝试在 Ubuntu Artful 17 10 上安装 Codelite 我发现这个问题在网上很常见 但我还没有找到解决办法 基本上当我跑步时sudo apt get install codelite wxcrafter我得到了这些未
  • pngcrush:在 Linux 上 uncrush 吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Apple 的 iOS SDK 使用 pngcrush 的修改版本来转换 iOS 捆绑包中的 png
  • SQL 查询中的数组? [复制]

    这个问题在这里已经有答案了 我在使用 WHERE 子句中的数组进行 SQL 查询时遇到问题 例如 我的阵列 myarray 1 hi myarray 2 there myarray 3 everybody 我的MySQL语句 SELECT
  • 将嵌套的对象数组展平到数组字段上

    有一个对象 a1 name x age 21 addr flat 1 add xyz flat 2 add xsr name y age 22 addr flat 3 add xyz1 flat 4 add xsr1 期望的输出 name
  • 如何使用 jasmine 测试 IIFE 中定义的 angularjs 模块?

    如何在 jasmine 上测试这个模块 问题是测试起来非常困难 controller因为函数隐藏在闭包内 所以测试它们非常困难 换句话说 考虑到下面的模块定义 为 MainCtrl 编写单元测试似乎是不可能的 function use st