javascript - 全局语法 : Breadth first traversal to get all items in a folder using Karma

标签 javascript karma-runner glob

我正在编写 Karma 来测试一些 AngularJS 代码。为了使测试正确运行,某些模块必须先于其他模块运行。 Controller 和服务在模块实例化之后出现。

我的代码现在的结构方式(非常简化)是我有一个“app”文件夹,其中包含另一个名为“controllers”的文件夹。

在“app”内,我有一个 app.js 文件。在“app/controllers”内部,我有一些Controller.js。

/root 
    --- /app
           --- app.js
           --- /controllers
               --- someController.js

在运行测试之前,我使用 Karma 加载所有文件。测试在源(应用程序)文件之后加载。但它加载源文件的顺序是不合需要的。它首先加载 someController.js,然后再加载 app.js。可能是因为它进行了深度优先遍历。我不是在寻找算法或任何东西,因为这就是谷歌似乎给我的一切。只是一个简单的字符串 glob 模式。

我使用的语法是“root/**/*.js”来获取“root”所有子目录中的所有文件。

如何向 Karma 指定我要在加载“app/controllers/”中的文件之前加载“/app”中的所有文件? (即广度优先遍历)

我从 Karma 文档中遵循的示例位于:http://karma-runner.github.io/0.13/plus/requirejs.html在配置 Karma 部分下。

具体:

 files: [
      {pattern: 'lib/**/*.js', included: false},
      {pattern: 'src/**/*.js', included: false},
      {pattern: 'test/**/*Spec.js', included: false},

      'test/test-main.js'
    ],

谢谢!

最佳答案

我不知道有什么方法可以显式控制通配符的遍历策略,但是您可以手动创建多个模式来强制实现所需的顺序。如果您首先使用简单的 dir/*.js 模式,则只会匹配顶级 .js 文件,然后在第二遍中您可以使用更深入的更宽松的 dir/**/*.js 模式。

在您的情况下,这些模式将类似于:

{pattern: 'app/*.js', included: false},
{pattern: 'app/**/*.js', included: false},
<小时/>

但是,如果您有多个位置需要指定加载顺序,则维护起来可能会变得很麻烦。对于这样的情况,我发现设置构建环境以在将包含内容生成到应用程序的主 .html 文件的同时将包含内容生成到 karma 配置文件中非常有帮助 - 通常两者均适用相同的订单限制。例如,如果您使用的是 grunt-wiredep 之类的东西,那么只需添加带有自定义 fileTypes 条目的新目标即可设置正确的语法。

关于javascript - 全局语法 : Breadth first traversal to get all items in a folder using Karma,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750092/

相关文章:

angular - 测试 Angular 库,同时测试库组件和示例应用程序

javascript - 使用 $httpBackend + $resource 进行 Angular karma 单元测试,无需使用模块引导

regex - 有邪恶的球体吗?

node.js - GruntJS 递归 globbing 区别

javascript - 如何将 Clipboard.js 值保存到字符串

javascript - 使文本框中的默认值在使用 jQuery 输入文本之前不会更改

javascript - 移除带有子元素的父元素

Angular 2/4 karma 测试

Python,使用 glob 和 subprocess.call 的 cwd 参数

javascript - $(document.activeElement) 在 Firefox 中不工作