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

Dan*_*Dan 9 unit-testing node.js nodeunit gruntjs

我有点不了解如何编写复杂的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']);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Ben*_*Ben 9

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

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

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