#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);
});
У кого-нибудь есть совет?