如何测试Grunt任务?理解和最佳实践

时间:2013-12-12 11:30:47

标签: node.js unit-testing gruntjs nodeunit

我有点不了解如何编写复杂的Gruntfile.js并将其用于测试。我是否以正确的方式使用Grunt?我想请社区寻求帮助,并以其他方式做出贡献。

我正在为Grunt写一个新任务,并希望在Github和npm上为广大观众推出它。我想为这项任务进行自动化测试(我想学习如何正确地完成它!)。

我想测试不同的选项组合(现在大约15个)。所以,我应该多次:

  • 运行清理
  • 使用下一个选项集
  • 运行我的任务
  • 运行测试并将选项对象传递给测试

要查看一些非工作代码以便更好地理解:

Gruntfile:

grunt.initConfig({

    test_my_task: {
        testBasic: {
            options: {
                 //first set
            }
        },
        testIgnore: {
            options: {
                //another set
            }
        },

        //...
    }

    clean: {
        tests: ['tmp'] // mmm... clean test directory
    },

    // mmm... unit tests.
    nodeunit: {
        tests: ['test/*.js']  //tests code is in 'tests/' dir
    }
});

grunt.registerTask('test', ['test_my_task']);

我知道在给出tmp/对象时如何检查options文件夹是否处于所需状态。

问题在于把事情放在一起。

我会问模板代码作为答案,npo需要放置工作示例。

PS:你可以提出另一个测试工具,nodeunit不是必须的。

PPS:废话,我现在可以用普通的javascript写这个!也许我错了,我想把Grunt放进单元测试中?但我想测试我的任务在真实环境中如何工作,并且从Grunt传递了不同的选项......

1 个答案:

答案 0 :(得分:9)

您可能希望查看grunt-lintspaces配置。测试look like this,这似乎是一个很好的方法。 grunt-lintspaces使用nodeunit,但现在似乎有很多插件。

如果你不想测试实际的grunt输出而不是功能,你可以使用我用于https://github.com/pghalliday/grunt-mocha-test的grunt-mocha-test - the grunt-available-tasks tests。我更喜欢描述个人测试风格,它读得很好;使用它的好处是你实际测试你的插件做什么,而不包括你的Gruntfile中的大量配置;即测试代码应该在测试中。

Grunt已经过充分测试,因此测试其配置是否有效是没有意义的。只需测试您自己的插件的功能。