如何测试Grunt插件

 武艺最新单曲问月008 发布于 2023-02-07 12:18

我正在创建我的第一个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";
    }

  });

};

我已经明确包含了两种方法,以确保我的测试正常进行,但事实并非如此。这两种方法似乎都无法访问...我如何才能访问它们以进行测试?这是我的摩卡咖啡测试。

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

非常感谢!

1 个回答
  • 理想情况下,您想测试功能。您的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的包装:

    https://github.com/sindresorhus/grunt-recess

    https://github.com/twitter/recess

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

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

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

    2023-02-07 12:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有