如何使用通配符在Intern中指定测试套件?

时间:2013-09-24 22:18:10

标签: intern

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

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

但这只会导致测试运行器尝试加载src/app/tests/*.js。我真的必须单独列出每个测试套件吗?

2 个答案:

答案 0 :(得分:2)

常见的惯例是拥有一个all模块来收集您的测试模块,例如:

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

然后,您只需列出套件数组中的all模块,如下所示:

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

通常这与Dojo 1.x中使用DOH的标准做法没有什么不同,除了在不同的模块名称下。 AMD加载器不支持模块ID中的globbing,因此这实际上并不是Intern的直接限制。

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

答案 1 :(得分: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配置文件,其格式与上面的类似。只需删除逻辑,它就可以有效地成为通配符。如果每个类别的测试套件(单元和功能)都位于其自己的目录中,则很容易生成其中包含的所有文件的路径列表。