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

如何在指令的链接功能中测试行为

法烨华
2023-03-14
问题内容

在我的某些指令中,我正在向作用域添加函数以处理特定于该指令的逻辑。例如:

link: function(scope, element, attrs) {
         scope.doStuff = function() {
            //do a bunch of stuff I want to test
         }        
      }

我该如何测试该功能?我到处搜索如何测试指令,但是发现的更多内容是测试元素上的更改。我当然可以在每次测试之前编译指令,但是每次都会覆盖我的范围。我想在我的范围更改属性时测试该功能。

有什么方法可以保留从指令定义返回的对象吗?然后,我可以直接调用链接函数并测试作用域上定义的每个函数的行为。有没有更好的方法来完成所有这些工作?

我正在使用Jasmine来运行测试,并且想要在describe函数中进行作用域设置,因此it对于同一个作用域数据,我可以具有多个功能。


问题答案:

基本上,不是测试链接函数本身,而是以编程方式测试指令的结果。您要做的是将指令写到字符串中,并使用$compile它进行角度处理。然后,您测试输出以确保正确连接了所有设备。

Angular的资料中有很多很好的例子,例如如何对ngRepeat指令进行测试。

您可以看到他们在做什么,即设置指令,更改范围(在本例中为$rootScope)以确保它已被$digested,然后测试其输出的DOM以确保一切都正确连接。如果伪指令正在更改范围,那么您也可以测试范围中的内容。

ngClick的测试也很有趣,因为它显示了浏览器交互的测试及其对范围的影响。

为了完整起见,以下是ngClick测试的一个代码段,我认为测试指令的总结很不错:

 it('should get called on a click', inject(function($rootScope, $compile) {
   element = $compile('<div ng-click="clicked = true"></div>')($rootScope);
   $rootScope.$digest();
   expect($rootScope.clicked).toBeFalsy();

   browserTrigger(element, 'click');
   expect($rootScope.clicked).toEqual(true);
 }));

因此,在你的情况下scope.doStuff功能,我不考什么它 ,这么多,因为我最好的测试无论它影响的范围,并且它随后进行的DOM元素



 类似资料:
  • 问题内容: 也许我对指令控制器的工作原理有一个基本的误解,据我了解,它们被用作暴露给其他指令和控制器的一种API。我正在尝试使控制器和链接功能进行内部通信。 例如,我希望能够通过控制器函数设置一个变量,然后在链接函数中使用它: 如何在链接功能中访问myVar或sayHi?还是我完全错过了重点? 问题答案: 控制器的$ scope(在控制器中定义,而不在函数中定义)和链接都相同。可以从链接中使用在控

  • 问题内容: 我正在尝试创建一条指令,该指令允许将元素定义为可点击或不可点击,并且将被定义为: 我希望生成的HTML是: 我的指令实现如下所示: 我可以看到,添加新属性后,Angular不了解,因此不会触发。我尝试在设置属性后添加一个,但它会导致无限的链接/编译循环。 我知道我可以只检查函数中的值是否为,但是我很好奇如何动态添加事件来执行此操作,因为我可能需要使用多个其他指令来执行此操作,而我不想这

  • 本文向大家介绍您如何进行功能测试?,包括了您如何进行功能测试?的使用技巧和注意事项,需要的朋友参考一下 功能测试 作为功能测试的一部分,应该对业务指定的所有用户要求进行良好的测试。功能测试要求在类似于客户要求的环境中进行测试。所有边界条件,负面情景都被考虑在内。应用程序的每个功能都应该可以很好地运行,并且不会出现任何错误。 功能测试的目的 应该测试运行良好的应用程序预期的基本要求。用户界面应易于使

  • 在其他一些测试框架中,我习惯于标记测试,例如@really_slow,@front_end

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

  • 问题内容: 我有一个简单的功能要测试: 但是,如何测试该函数实际发送到标准输出的内容呢?Test :: Output在Perl中实现了我想要的功能 但这对于每个测试来说都是很多额外的工作。我希望有一种更标准的方法,或者也许是一个抽象库来处理此问题。 问题答案: 还需要记住的一件事是,没有什么可以阻止您编写避免编写样板代码的函数。 例如,我有一个使用的命令行应用程序,我编写了以下函数: 然后像这样使