Не изящное решение, но я взял подход к установке моих зависимостей (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 я внести свой вклад против.
Пс: Буду признателен за подход, который я принял.
Что вы пытаетесь сделать именно так, что вы * не можете сделать? В командной строке часто запускаются задачи Grunt. Тесты Mocha могут использоваться для тестирования инструментов командной строки. Ваши задачи Grunt создаются Yeoman. Предположительно, это текстовые файлы. Тест Mocha может читать текстовый файл и проверять, что он как и ожидалось. Так что же вы не можете сделать, точно? – Louis