Javascript Glob语法:宽度优先遍历,使用Karma获取文件夹中的所有项目

Javascript Glob语法:宽度优先遍历,使用Karma获取文件夹中的所有项目,javascript,karma-runner,glob,Javascript,Karma Runner,Glob,我写Karma是为了测试AngularJS代码。为了使测试能够正确运行,必须先运行某些模块,然后再运行其他模块。控制器和服务位于模块实例化之后 我的代码现在的结构(非常简化)是我有一个“app”文件夹,其中包含另一个名为“controllers”的文件夹 在“app”中,我有一个app.js文件。在“app/controllers”中,我有一些controller.js /root --- /app --- app.js --- /contr

我写Karma是为了测试AngularJS代码。为了使测试能够正确运行,必须先运行某些模块,然后再运行其他模块。控制器和服务位于模块实例化之后

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

在“app”中,我有一个app.js文件。在“app/controllers”中,我有一些controller.js

/root 
    --- /app
           --- app.js
           --- /controllers
               --- someController.js
我正在使用Karma在运行测试之前加载所有文件。测试在源(应用程序)文件之后加载。但它加载源文件的顺序是不受欢迎的。它在加载app.js之前先加载someController.js。可能是因为它进行了深度优先遍历。我不是在寻找一个算法或任何东西,因为谷歌似乎只给了我这些。只是一个简单的字符串全局模式

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

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

我在Karma的文档中遵循的示例如下:在配置Karma部分下

具体而言:

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

      'test/test-main.js'
    ],

谢谢

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

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

{pattern: 'app/*.js', included: false},
{pattern: 'app/**/*.js', included: false},


但是,如果您有几个地方需要指定装载顺序,那么维护起来可能会很麻烦。对于这种情况,我发现设置构建环境非常有用,可以在将包含生成到应用程序的主
.html
文件的同时,将包含生成到karma配置文件中-通常相同的顺序限制适用于两者。例如,如果您使用的是像
grunt wiredep
这样的东西,那么添加一个带有自定义
fileTypes
条目的新目标来设置正确的语法就很容易了。

这正是我一直在做的:“app/*.js”然后是“app/***.js”,但正如您所说的。我有许多“应用程序”文件夹和这些文件夹中的许多控制器/服务。我正在研究使用RequireJS来指定它们的加载顺序,但是它们的文档很难理解。如果我有一个广度优先遍历的globbing模式,它将很容易解决我的问题。我可以考虑找一些电线接头来填充,但这似乎超出了填充的范围。Gulp只是运行Karma,它已经使用了RequireJS。使用Gulp的另一个扩展来配置Karma似乎过于复杂。我错过了您提到的Require部分-如果您使用的是RequireJS,那么应该考虑加载顺序,而不是Karma。您的require配置(test main)是什么样子的?