2014-10-06 2 views
1

Я использую Yeoman для создания некоторых проектов, а также задач для ворчания. Теперь я также хотел бы протестировать сгенерированные задачи grunt с использованием Mocha, но я только нахожу некоторую информацию о том, как использовать тесты Mocha в Grunt ;-)Test Grunt Tasks

Может кто-нибудь помочь?

+0

Что вы пытаетесь сделать именно так, что вы * не можете сделать? В командной строке часто запускаются задачи Grunt. Тесты Mocha могут использоваться для тестирования инструментов командной строки. Ваши задачи Grunt создаются Yeoman. Предположительно, это текстовые файлы. Тест Mocha может читать текстовый файл и проверять, что он как и ожидалось. Так что же вы не можете сделать, точно? – Louis

ответ

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 я внести свой вклад против.

Пс: Буду признателен за подход, который я принял.

Смежные вопросы