这里是(相关)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 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 /。