如何测试同一模块的多个版本?

时间:2014-03-03 02:51:54

标签: javascript unit-testing build npm gulp

我想将模块发布到多个组件管理器系统:npmjs,bower等...我还想创建可下载的版本,例如一个用于requirejs的AMD样式,一个用于commonJS样式,一个用于浏览器中的全局命名空间,为每个命名空间缩小等等......这些超过10个版本。

我目前只有一个AMD版本,我用amd风格的karma,jasmine和requirejs为它编写单元测试。你有什么建议,如何为它们生成其他构建和测试?

我的意思是我不能决定我应该作为转换的基础。每个输出包都有一个共同的部分,并且还有一个包依赖部分。

AMD - requirejs(我不确定使用配置选项)

define(["module", "dependency"], function (module, dependency) {
    var m = {
        config: function (options){
            //...
        },
        //...
        //do something with the dependency
    };

    m.config(module.config()); //load config options set by require.config()
    return m;
});

CommonJS的

var dependency = require("dependency");
module.exports = {
    config: function (options){
        //...
    },
    //...
    //do something with the dependency
};

全球

var m = (function (){
    return {
        config: function (options){
            //...
        },
        //...
        //do something with the dependency
    };
})(dependency);

我不知道,我应该在每次测试之前开发公共代码并构建,还是应该开发其中一个软件包,对其进行测试,然后将其转换为其他版本?

我打算在自动发布之前使用gulp创建构建并自动为每个构建测试单元测试。哦,我还需要更改自动版本号。顺便说一句。是否有必要在建造程序后调用单元测试,您如何看待?我只是想确定,没有发布错误的代码......

1 个答案:

答案 0 :(得分:0)

gulp有转换库:

因此很容易将一种包格式转换为另外两种格式。这可以通过测试和代码完成。 commonjs可以用node和jasmine-node测试,标准js可以用karma和jasmine测试,amd可以用karma,requirejs和jasmine测试。

创建公共描述符并在每次测试之前转换它是一个糟糕的选择。我不想创建另一种语言,如coffeescript等...所以包之间的转换是可以的。

在发布之前调用单元测试是可以的。没有其他常见的包类型,因此这3个包对于我将使用的每个组件管理器都是足够的。

我不确定版本控制。手动设置并不难,但也许像travis或maven这样的系统可以帮助更多......我会找出并编辑这个答案。