javascript - 如何测试 Grunt 插件

标签 javascript gruntjs mocha.js

我正在创建我的第一个 Grunt 插件。我真的很想在开发时练习测试我的插件。我选择了 mocha 作为我的测试框架,因为它看起来很流行,并将我的 gruntfile 设置为自动监视测试文件何时更改并运行它们。这一切看起来都不错。

但是,我还没有找到很多关于如何实际测试 Grunt 插件的文档。我查看了大约十几个不同的 grunt 插件的代码,尤其是 contrib 插件,它们对我来说没有多大意义。

当我尝试测试我的代码时,我试图将其分解为非常具体的函数。所以,这是一个插件的基本结构,其中有一个函数。

'use strict';

function testOutsideOfTask(){
  return "i am outside";
}

module.exports = function(grunt) {
  grunt.registerMultiTask('example_task', 'I do a thing.', function() {

    function testInsideOfTask(){
      return "i am inside";
    }

  });

};

我明确地包含了一些方法来确保我的测试有效,但事实并非如此。这两种方法似乎都无法访问...我如何访问它们进行测试?这是我的 Mocha 测试。

var grunt = require('grunt');
var assert = require("assert");

describe('testOutsideOfTask', function() {
  it('do something', function() {
    assert.equal("i am outside", testOutsideOfTask());
  });
});

describe('testInsideOfTask', function() {
  it('do something', function() {
    assert.equal("i am inside", testInsideOfTask());
  });
});

他们都返回这样的东西。所以,不知何故它只是无法访问这些功能,但是,当我查看其他测试示例时,它们似乎并没有特别需要正在测试的文件......例如 https://github.com/gruntjs/grunt-contrib-clean/blob/master/test/clean_test.js

1) testOutsideOfTask should do something:
ReferenceError: testOutsideOfTask is not defined

非常感谢!

最佳答案

理想情况下,您想要测试功能。您的 Grunt 插件最终应该作为更抽象方法的包装器,这些方法可以执行您想要的操作,但不一定与 Grunt 的工作方式相关;然后对于实际的插件,您在每个文件上运行这些方法,记录一些输出等。如下所示:

var lib = require('./lib.js');

module.exports = function(grunt) {
    grunt.registerMultiTask('test', function() {
        lib.doSomeMethod();
        grunt.log.ok('Something happened');
    });
}

因此,在该伪代码中,您需要实际测试 doSomeMethod 函数,而不是 Grunt 注册任务或记录到 CLI。这已经经过充分测试。

许多 Grunt 插件都是以这种方式工作的,事实上许多插件都是现有节点模块的包装器。例如,grunt-recess 是 twitter/recess 的包装:

我自己的一个模块更特定于 Grunt,但对该模块的测试侧重于该模块的实际功能。您可以在这里查看:

https://github.com/ben-eb/grunt-available-tasks/blob/master/test/lib/filterTasks.test.js

我也在用 Mocha 进行测试。我建议您使用grunt-mocha-test通过 Grunt(以及 JSHint 和其他)运行测试。

关于javascript - 如何测试 Grunt 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20861251/

相关文章:

javascript - 逻辑与 (&&) 和或 (||) 运算符

node.js - 在 Node/Grunt 中执行特定于操作系统的脚本

javascript - Grunt - 无法缩小js文件

javascript - 使用 sinon stub ES6 原型(prototype)方法

node.js - 如何在后端模拟第三方api调用

javascript - 当报告的错误在 jquery 中时(传递给 jquery 的数据),如何使用 firebug 调试使用 jQuery 的应用程序

javascript - Brython 和 Python

javascript - 谷歌地图地铁站的问题

node.js - 如何设置 grunt 文件来监视和编译 less 文件

javascript - 如何在 React Router 4 下对组件进行单元测试