测试Grunt任务

时间:2014-10-06 10:08:17

标签: node.js gruntjs mocha yeoman

我正在使用Yeoman来生成一些项目和grunt-tasks。 现在我还想使用Mocha测试生成的grunt任务,但我只找到一些如何在Grunt中使用Mocha测试的信息; - )

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

不是一个优雅的解决方案,但我采用了安装我的依赖项(npm install)的方法,然后运行相应的grunt任务(例如grunt less),然后编写测试逻辑发布该操作。我已经使用了嵌套的exec调用。

describe('less grunt tasks tests', function () {
    var prompts = {
      workFolder: 'temp',
      fiddleDesc: 'mocha test'
    };
    var testGlobal = {};
    beforeEach(function(done) {
      testGlobal.app = helpers.run(path.join(__dirname, '../app'))
        .inTmpDir(function(dir, err) {
          if(err) { done(err); return; }
          testGlobal.dir = dir;
          // console.log(dir);
        })
        .withArguments(['skip-install'])
        .withOptions({ less: true })
        .withPrompts(prompts)
        .on('end', function(){
          done();
        });
    });

    it('should modify app/styles/style.css', function(done){
      this.timeout(60000 * 10); //10 minutes - my network is f**ked up
      var opts = {
        cwd : testGlobal.dir,
        env: process.env,
        detached: true
      };
      var gen = testGlobal.app.generator;
      var devdeps = gen.devDependencies.join(' ');
      var rootPath = testGlobal.dir;
      var getPath = function(fpath) {
        var s = path.join(rootPath, fpath);
        // console.log(s); ;
        return s;
      };

      exec('npm install ' + devdeps, opts, function(err, stdout, stderr) {
        if(err) {
          done(err);
          return;
        }

        var h1 = fs.readFileSync(getPath('app/less/h1.less'), 'utf8');
        var css = fs.readFileSync(getPath('app/styles/style.css'), 'utf8');
        // expect(css).to.not.contain(h1);
        expect(css).to.not.contain('h1');

        exec('grunt less', opts, function(e, out, serr){
          if(e) {
            done(e);
            return;
          }
          // console.log(out);

          var h1 = fs.readFileSync(getPath('app/less/h1.less'), 'utf8');
          var css = fs.readFileSync(getPath('app/styles/style.css'), 'utf8');
          // expect(css).to.contain(h1); //this expect fails since for some reason \r are stripped out
          expect(css).to.contain('h1');
          done();
        });
      });
    });
  });

如需更多参考,您可以在我提供的repo内查看更多测试代码。

Ps:我很感激你对我所采取的方法的评论。