如何测试AngularJS指令

前端之家收集整理的这篇文章主要介绍了如何测试AngularJS指令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用一个将使用AngularJS的Rails 3.2应用程序。我可以得到Angular做我需要的,但我有一个非常困难的时间,弄清楚如何测试我在做什么。我使用守护茉莉花运行茉莉花specs使用PhantomJS。

这里是(相关)html:

<html id="ng-app" ng-app="app">
  <div id="directive-element" class="directive-element">
  </div>
</html>

javascript(在coffeescript)看起来像:

window.Project =
  App: angular.module('app',[])
  Directive: {}

Project.Directive.DirectiveElement =
  ->
    restrict: 'C'
    link: (scope,element,attrs) ->
      element.html 'hello world'
Project.App.directive 'directiveElement',Project.Directive.DirectiveElement

上面的代码正是它打算做什么。测试是问题。我不能让他们工作。这是我试过的一件事。发布这个主要只是开始谈话的地方。

describe 'App.Directive.DirectiveElement',->
  it 'updates directive-element',->
    inject ($compile,$rootScope) ->
      element = $compile('<div id="app" ng-app="app"><div id="directive'element" class="directive-element"></div></div>')
      expect(element.text()).toEqual('hello world')

另外,我是新的AngularJS,所以如果有任何关于命名空间,模块等的任何最佳实践,我不跟踪,指导将不胜感激。

如何获得测试这个工作?

Here’s how alert directive is tested in angular-ui/bootstrap

Here’s another simple set of tests,for the buttons directive.

这里有一些提示

>确保告诉测试运行器你在beforeEach(module(‘myModule’))测试的模块。
>如果你的指令中有外部templateUrls,你会想以某种方式为测试运行器预先缓存它们。测试运行器不能异步获取模板。在bootstrap中,我们通过构建步骤将模板注入到javascript中,并使每个模板成为一个模块。我们使用grunt-html2js grunt任务。
>在你的测试中,使用inject helper在一个beforeEach注入$ compile和$ rootScope和你需要的任何其他服务。使用varmyScope = $ rootScope。$ new()为每个测试创建一个新的作用域。你可以做var myElement = $ compile(‘< my-directive>< / my-directive>‘)(myScope);创建指令的实例,并且访问其元素。
>如果指令创建自己的范围,并且想要测试它,你可以通过执行var directiveScope = myElement.children()获取对该指令的作用域。scope() – 它将获取元素的子元素(指令本身) ,并获得范围。
>对于测试超时,可以使用$ timeout.flush()结束所有挂起超时。
>对于测试承诺,记住当你解决一个承诺,它不会调用它的回调,直到下一个摘要。所以在测试中你必须这么做:deferred.resolve(); scope。$ apply();.

您可以在the bootstrap repo中找到不同复杂度的指令的测试。只需查看src / {directiveName} / test /。

猜你在找的Angularjs相关文章