当前位置: 首页 > 面试题库 >

您如何模拟指令以启用更高级别指令的单元测试?

安坚诚
2023-03-14
问题内容

在我们的应用程序中,我们有几层嵌套指令。我正在尝试为顶级指令编写一些单元测试。我嘲笑了指令本身需要的东西,但是现在我遇到了较低级别指令的错误。在针对顶级指令的单元测试中,我不想担心较低级指令中发生的事情。我只想模拟较低级别的指令,并且基本上不执行任何操作,因此我可以单独测试顶层指令。

我尝试通过执行以下操作来覆盖指令定义:

angular.module("myModule").directive("myLowerLevelDirective", function() {
    return {
        link: function(scope, element, attrs) {
            //do nothing
        }
    }
});

但是,这不会覆盖它,它只是在real指令之外运行它。如何在我对顶级指令的单元测试中阻止这些较低级别的指令执行任何操作?


问题答案:

由于指令注册的实现,似乎无法用模拟指令替换现有指令。

但是,您有几种方法可以对高层指令进行单元测试,而不会受到较低层指令的干扰:

1)不要在 单元测试模板中 使用较低级别的指令:

如果您的下级指令未由上级指令添加,则在单元测试中,请使用仅具有higer-level-directive的模板:

var html = "<div my-higher-level-directive></div>";
$compile(html)(scope);

因此,较低级别的指令不会产生干扰。

2)在指令的实现中 使用服务

您可以通过服务提供较低级别的指令链接功能:

angular.module("myModule").directive("myLowerLevelDirective", function(myService) {
    return {
        link: myService.lowerLevelDirectiveLinkingFunction
    }
});

然后,您可以在单元测试中模拟此服务,以避免干扰更高级别的指令。如果需要,该服务甚至可以提供整个指令对象。

3)您可以使用 终端指令 覆盖下级 指令

angular.module("myModule").directive("myLowerLevelDirective", function(myService) {
    return {
        priority: 100000,
        terminal: true,
        link: function() {
            // do nothing
        }
    }
});

使用终端选项和更高的优先级,将不会执行您真正的较低级别的指令。指令doc中的更多信息。

在此Plunker中了解其工作原理



 类似资料:
  • 当在汇编指令级别分析代码时,鉴于现代CPU不串行或按顺序执行指令,指令指针的位置真正意味着什么?例如,假设以下x64汇编代码: 指令指针将在哪条指令上花费大部分时间?我可以为他们所有人想出好的理由: mov-RAX,[RBX]可能需要100秒的周期,因为它是缓存未命中

  • 问题内容: Angular文档说:- DOM的编译是通过调用$ compile()方法执行的。该方法遍历DOM并匹配指令。如果找到匹配项,则将其添加到与给定DOM元素关联的指令列表中。一旦标识了给定DOM元素的所有指令,便 按优先级 对它们进行 排序 并执行其compile()函数。 我相信ng-repeat指令的优先级比自定义指令低,在某些情况下,例如dynamicid和custom指令。角度是

  • 使用方式 truffle [command] [options] 命令 build 构建一个开发中的app版本,创建.build目录。 truffle build 可选参数 --dist: 创建一个可发布的app版本。仅在使用默认构造器时可用。 查看6. 构建应用章节来了解更多。 console 运行一个控制台,里面包含已初始化,且随时可用的合约对象。 truffle console 一旦控

  • 问题内容: 我有一个已定义的AngularJS指令。我正在尝试与Jasmine进行单元测试。 根据此建议,我的JasmineJavaScript如下所示: 当我在Jasmine spec错误中运行此命令时,出现以下错误: 我想要的只是让templateUrl原样加载- 我不想使用。我相信这可能与使用ngMock而不是ngMockE2E有关。如果是罪魁祸首,如何使用后者而不是前者? 提前致谢! 问题

  • 问题内容: 问题: 我希望能够对 Angular 2中的指令 进行 单元测试,以确保它可以正确编译。 在Angular 1中,之后可以使用service和call 。我特别希望能够在单元测试中做到这一点,这样我就可以测试Angular最终在编译后的代码中运行了。 限制条件: 使用JAVASCRIPT的Angular 2 。所有有些相关的资源似乎都需要TS。也许这些资源确实可以解决问题,而我对TS的

  • 问题内容: 作为Java程序的JIT编译结果,我得到了以下程序集列表。 我对指令的理解在这里是没有用的,因为测试的主要思想是 标记SF,ZF,PF被修改,而AND的结果被丢弃。 在这里,我们不使用这些结果标志。 是JIT中的错误还是我错过了什么?如果是,最好的报告地点在哪里?谢谢! 问题答案: 那一定是线程本地握手poll。看从哪里读取。如果是从(线程本地存储)偏移量读取的,那就是家伙。在这里查看