Gulp 角度单元测试指令 templateUrl

2024-01-10

我在互联网上阅读了很多帖子,但找不到任何有效的解决方案 我正在尝试为指令编写单元测试,并希望从模板缓存提供 html 文件

我使用 Gulp 作为构建工具

测试的 gulp 任务看起来像这样

gulp.task('test', function (done) {
    karma.start({
        configFile:__dirname + '/' + config.test.karmaconf,
        singleRun: false
    }, done);
});

and in karma.conf,我已经定义了

    browserify: {
        debug: true,
        transform: [['browserify-ng-html2js', {
            module: 'templates',
            extension: 'html'
        }]]
    } 

在单元测试中,我声明

beforeEach(angular.mock.module('templates'));

但收到

Error: Unexpected request: GET path/to/some.html
No more request expected
    at $httpBackend 

我也尝试使用preprocessors and ngHtml2JsPreprocessor在 karma.conf 中但没有成功。谁能提供解决方案或指出我如何调试为什么不提供模板?


Solution

您可以通过多种方式来做到这一点。我是这样做的:

  1. Use gulp-角度模板缓存 https://www.npmjs.com/package/gulp-angular-templatecache:
gulp.task('bundle-common', function() {
  return merge(
    // Store all html files in $templateCache
    gulp.src([
      appDir + '/common/**/*.html'
    ])
    .pipe($$.angularTemplatecache({
      root: 'common'
    }))

    // Append everything else: directives, tests, etc.
    gulp.src([
      appDir + '/common/**/*.js'
    ])
  )
  .pipe($$.concat('common.js'))
  .pipe(gulp.dest('public/js/'));
});

这将输出一个名为common.js包含所有 html 模板和指令。

它看起来有点像这样:

angular.module("templates").run(["$templateCache", function($templateCache) {
$templateCache.put("common/a-great-eye.html","<div>lidless, wreathed in flame, 2 times</div>");}]);

angular.module("common")

.directive('aGreatEye', function () {
    return {
        restrict: 'E',
        replace: true,
        templateUrl: 'common/a-great-eye.html'
    };
});

...
  1. In karma.conf.js load common.js:
     files: [
      '../vendor/jquery/dist/jquery.js',
      '../vendor/angular/angular.js',
      '../vendor/angular-mocks/angular-mocks.js',
      '../public/js/common.js'
    ]
  1. 在您的测试文件中引用templates module:
describe('Unit testing great quotes', function() {
  var $compile,
      $rootScope;

  // Load the common module, which contains the directive
  beforeEach(function() {
    module('templates');
    module('common');
  });

  // Store references to $rootScope and $compile
  // so they are available to all tests in this describe block
  beforeEach(inject(function(_$compile_, _$rootScope_){
    // The injector unwraps the underscores (_) from around the parameter names when matching
    $compile = _$compile_;
    $rootScope = _$rootScope_;
  }));

  it('Replaces the element with the appropriate content', function() {
    // Compile a piece of HTML containing the directive
    var element = $compile("<a-great-eye></a-great-eye>")($rootScope);
    // fire all the watches, so the scope expression {{1 + 1}} will be evaluated
    $rootScope.$digest();
    // Check that the compiled element contains the templated content
    expect(element.html()).toContain("lidless, wreathed in flame, 2 times");
  });
});

调试

在 Chrome 浏览器中开始测试并点击“调试”按钮。然后打开开发者控制台。

几点建议:

  • 您可以在测试中添加断点。
  • 确保控制台窗口中没有错误,尤其是注入错误。如果这样做,请验证您请求的所有 js 文件karma.config.js(它们将在开发人员控制台中列出)已正确加载并包含您需要的代码(角度、模板、指令等)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gulp 角度单元测试指令 templateUrl 的相关文章

随机推荐

  • Spring初始化方法参数

    我是 spring 新手 我想问是否可以将参数传递给 bean 的 init 和 destroy 方法 Thanks 不 你不能 如果您需要参数 则必须事先将它们作为字段注入 样品豆 public class Foo Autowired p
  • 在 ply 的正则表达式中匹配 unicode

    我正在匹配标识符 但现在遇到一个问题 我的标识符允许包含 unicode 字符 因此 旧的做事方式是不够的 t IDENTIFIER r A Za z A Za z 0 9 In 我的标记语言 http freehg org u cheer
  • 在页面之间导航和传递数据 Ionic 2

    我在使用 Ionic2 的页面之间导航时遇到一些问题 我有一个从 data json 获得的数据列表 这是清单 我想了解详情 示例 来自 A 我的 data Example Json 上的数据 title A lat 2 323733 lo
  • 使用 Eclipse 编译为特定的 JRE

    关于将 Eclipse 中的项目编译为特定的 JRE 我有两个问题 1 项目的属性窗口 gt Java 构建路径 gt 库选项卡 如果我想编译到 JRE 6 窗口是否应该显示构建路径中包含的 JRE 6 和 JRE 7 或者只有 JRE 6
  • Django 似乎正在缓存 datetime.now()

    我有一个看起来像这样的模型 class Item models Model publish date models DateTimeField default datetime datetime now 还有一个看起来像这样的经理 from
  • Xcode 版本 6.1 (6A1030) - Apple Mach O-Linker 错误 - 构建

    我将 Xcode 升级到最新版本 版本 6 1 6A1030 我使用 Swift 语言 当我构建应用程序时 我遇到了 25 个问题 Apple Mach O Linker error Undefined symbols for archit
  • Heroku Rails 控制台不再启动

    我在 heroku cedar stack 上运行 Rails 控制台时遇到问题 以下每个命令 heroku run console heroku run Rails console heroku run bundle execrails
  • 在Java中如何将整数转换为浮点数?

    我有两个整数x and y 我需要计算x y结果我想获得浮动 例如作为以下结果3 2我想要1 5的 我认为最简单 或唯一 的方法是转换x and y转换为浮点数类型 不幸的是 我找不到一种简单的方法来做到这一点 你能帮我吗 你只需要cast
  • Windows 服务使用 Topshelf 启动然后停止

    我正在使用 Quartz net 并且试图让 Quartz 服务器在 Windows 服务中启动 我创建了一个 Windows 服务项目并包含 Quartz net 库 在我的服务类中 我有 protected override void
  • HEIC 文件签名

    我正在寻找扩展名的文件签名的完整列表 特别是 我在查找扩展名 HEIC 和 HEIF 的文件签名时遇到了一些麻烦 你知道在哪里可以得到它吗 您可以在任何操作系统中使用十六进制文件查看器 有关文件签名的完整列表 请检查https www fi
  • 从 xyz 磁力计获取磁北 (iPhone 3.0)

    我实际上是在转发 iphone 开发板的一个问题 我没有问它 但我在试图寻找它的答案时发现了它 那里还没有人回复 所以我想我应该尝试将其发布在这里 预先感谢您的任何帮助 有谁知道有关根据 CLHeading 的原始 xyz 值计算磁航向的算
  • Kubernetes 无法从 docker hub 存储库中提取镜像

    大家好希望你们一切顺利 我需要我的主机命令从机从我的 docker hub 存储库中拉取映像 我收到以下错误 它不会让从机从存储库中拉取 但是当我转到从机时 手动拉动他拉动 来自 kubernetes master 的 第一行是来自 pod
  • HTML/JS 打开一个到 C$ 驱动器的窗口

    我需要在我的应用程序中有一个链接 用于打开特定计算机的远程 C 驱动器窗口 例如 这有效 a href Connect to C a 但是 我需要用一段 JS 代码来完成它 所以我想做这样的事情 function raiseQueryDia
  • Android ImageReader 获取 NV21 格式?

    我没有成像或图形方面的背景 所以请耐心等待 我在用JavaCV https github com bytedeco javacv在我的一个项目中 在里面examples https github com bytedeco javacv bl
  • 使用未显式实例化的 VBA 用户表单

    假设我有一个名为MyUserForm我用的像 Dim form as MyUserForm Set form New MyUserForm form SomeVar Hi form Show Displays Hi somewhere on
  • gdb 漂亮打印不起作用

    我正在尝试查看 C STL 容器的内容 我读here https stackoverflow com a 10994050 2627729最新版本的 gcc 和 gdb 默认支持漂亮的打印 但是当我尝试显示地图时 我得到以下信息 然后 我尝
  • 如何调试 cordova 混合应用程序

    因此 我在远程设备上运行了 cordova 应用程序 并且我正在尝试测试扫描仪 因此必须在 Android 设备本身上进行测试 但我不知道应该如何检查它抛出的错误 因为扫描仪在我的移动设备上无法工作 任何帮助将不胜感激 Thanks 调试
  • 如何在使用 React Native 时实现 SSL 证书固定

    我需要在我的 React Native 应用程序中实现 SSL 证书固定 我对 SSL TLS 知之甚少 更不用说固定了 我也不是本地移动开发人员 尽管我了解 Java 并在这个项目上学习了 Objective C 足以应付 我开始寻找如何
  • 如何通过用户脚本抓取 HTML 表格内容?

    我正在创建一个 Greasemonkey 脚本 该脚本读取基于文本的游戏中的信息并将其存储到数据库中以供将来使用 我想要的是能够读取用户的统计信息并将这些统计信息转换为变量 以便我可以继续使信息变得有用 这是我想从中获取统计信息的表的源代码
  • Gulp 角度单元测试指令 templateUrl

    我在互联网上阅读了很多帖子 但找不到任何有效的解决方案 我正在尝试为指令编写单元测试 并希望从模板缓存提供 html 文件 我使用 Gulp 作为构建工具 测试的 gulp 任务看起来像这样 gulp task test function