Как дождаться завершения задачи grunt перед запуском тестов mocha

#javascript #node.js #asynchronous #gruntjs #mocha.js

#javascript #node.js #асинхронный #gruntjs #mocha.js

Вопрос:

В двух словах…

У меня есть несколько задач grunt с внешними конфигурациями, которые я хочу протестировать (убедитесь, что они выполняют то, что должны делать). Итак, я хотел бы написать тест mocha, в котором выполняются задачи в before функции и утверждается, что все прошло хорошо.

…и с некоторыми подробностями

В моем gruntfile есть что-то вроде

 # Load task configs from `grunt` dir.
configs = require('load-grunt-configs') grunt,
    config:
        src: ['tasks/*{.js,.json,.coffee,.cson}']

# Load all **grunt tasks** with patter `grunt-*`
require('load-grunt-tasks') grunt, pattern: [
    'grunt-*'
]

# Pass configs to grunt
grunt.initConfig configs
  

и после этого некоторая регистрация задачи…

Однако теперь у меня есть доступ к моей less задаче, находящейся less.cson в моей tasks папке (которая использует grunt-contrib-less ).

Пока все хорошо. 🙂

Я использую chai для утверждений:

 describe('Checking static resources for dev', function () {

    describe('less task', function () {

        before(function () {
            grunt.task.run('less');
        });

        it('should have a compiled css file for docs', function () {
            grunt.file.isFile('public/css/docs.css').should.be.ok;
            grunt.file.isFile('public/css/docs.css.map').should.be.ok;
        });
  

Как и ожидалось, задача завершается после запуска тестов, поскольку она не асинхронна, и я не знаю способа сообщить grunt (без изменения существующей задачи / конфигурации), что он должен вызвать возможную done функцию, когда будет готов, а затем выполнить утверждение.

Я также пытался grunt-run-task , но не смог выполнить ни одной задачи (они прерываются с таймаутом, хотя я дал им более 20 секунд на завершение).

Думаю, я ищу что-то вроде

 before(function (done) {
    grunt.task.run('less', done);
});
  

У кого-нибудь есть совет?