2014-10-06 146 views
1

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

任何人都可以帮忙吗?

+0

你想要做什么,你*做不到? Grunt任务通常在命令行中调用。摩卡测试可以用来测试命令行工具。您的Grunt任务由Yeoman生成。据推测,这些都是文本文件。摩卡测试可以读取文本文件并检查是否如预期的那样。那么你究竟做了什么呢? – Louis 2014-10-06 11:21:39

回答

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:我很感激你对我采取的方法发表的意见。