2013-09-24 26 views
2

我在这个文件夹中有一堆单元测试:src/app/tests/。我是否必须在intern.js中单独列出它们,或者有没有办法使用通配符?我试过如何使用通配符在Intern中指定测试套件?

suites: [ 'src/app/tests/*' ] 

但只是使测试运行,以尝试加载src/app/tests/*.js。我真的必须单独列出每个测试套件吗?

回答

2

常见的约定是有一个all模块,收集你的测试模块,如:

define([ 
    './module1', 
    './module2', 
    // ... 
], function(){}); 

然后你简单地列出套房阵列中的all模块,像这样:

suites: [ 'src/app/tests/all' ], 

一般来说,这与Dojo 1.x中的DOH的标准做法没有什么不同,除了使用不同的模块名称。 AMD加载器不支持在模块ID中使用globbing,所以这不是实际的直接限制。

看起来很麻烦,但通常你会在创建时将每个模块添加到all.js,所以它不是那么多额外的工作。

+3

这是一个无赖。也许还有空间可以完成任务或者其他任务...... – Scott

0

我同意这种配置的冗长和不灵活性令人讨厌,难以扩展。

虽然它与通配符不一样,但下面是我如何解决这个问题。

修改intern.js配置文件:

define(
    [ // dependencies... 
     'test/all' 
    ], 
    function (testSuites) { 
      suites: testSuites.unit, 
      functionalSuites: testSuites.functional, 
    } 
) 

在这种力量来自一个事实,即test/all模块可以返回任何就是了。简单地给它一些很好命名的属性是模块ID字符串的数组,你准备好摇摆。

在给定的suitesfunctionalSuites的模块的define()依赖关系数组中指定测试模块的工作。但这不是很灵活。它仍然需要你挑选测试套件,注意逗号以及哪些被注释掉等等。你想要的是什么想要被命名为可以导出的集合。我这样做,是这样的...

test/all

define(
    [ // dependencies... 
     './unitsuitelist' // array of paths, generated by hand or Grunt, etc. 
     './funcsuitelist' 
    ], 
    function (unitSuites, funcSuites) { 

     var experiments, 
      funTests, 
      usefulTests, 
      oldTests 

     // any logic you want to construct great collections of test suites... 

     myFavoriteUnitSuites = funTests.concat(experiments); 
     myFavoriteFunctionalSuites = usefulTests.concat(oldTests); 

     return { 
      unit: myFavoriteUnitSuites 
      functional: myFavoriteFuncSuites 
     } 
    } 
) 

只要进行必要的逻辑一次与几个合理的集合。然后在开发过程中将它们交换到返回的对象中。如果您更改模块ID列表而不是代码,该模式仍然可以帮助您。使用bash,Grunt或其他工具自动生成其目录中所有测试套件文件位置列表很容易。这可以通过与上述类似的模式自动输入到intern.js配置文件中。只要删除逻辑,它可以有效地成为通配符。如果每个类别的测试套件(单元和功能)都位于其自己的目录中,那么生成包含在其中的所有文件的路径列表非常容易。

相关问题