2

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

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

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

4

2 回答 2

2

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

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

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

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

通常,这与 Dojo 1.x 中的 DOH 标准实践没有什么不同,只是使用了不同的模块名称。AMD 加载程序不支持在模块 ID 中进行通配,因此这并不是 Intern 的直接限制。

这可能看起来很繁重,但通常您会在all.js创建每个模块时添加它,因此实际上并没有那么多额外的工作。

于 2013-09-26T01:00:03.990 回答
0

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

虽然它与通配符不同,但这是我解决该问题的方法。

修改后intern.js的配置文件:

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

其强大之处在于test/all模块可以返回任何它想要的东西。只需给它一些命名良好的属性,它们是模块 ID 字符串的数组,您就可以开始使用了。

suites在给定或functionalSuites 确实有效的模块的 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与上述模式类似的模式自动输入到配置文件中。只需删除逻辑,它就可以有效地成为通配符。如果每个类别的测试套件(单元和功能)都存在于自己的目录中,则很容易生成其中包含的所有文件的路径列表。

于 2014-12-14T00:29:11.077 回答