gpt4 book ai didi

javascript - 如何测试 Grunt 插件

转载 作者:行者123 更新时间:2023-11-29 17:11:45 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com