Tôi có một bộ mục tiêu gulp.js để chạy thử nghiệm mocha hoạt động như một nét duyên dáng chạy qua gulp-mocha. Câu hỏi: làm thế nào để gỡ lỗi các bài kiểm tra mocha của tôi chạy qua gulp? Tôi muốn sử dụng một cái gì đó như node-inspector để thiết lập điểm break trong src của tôi và kiểm tra các tập tin để xem những gì đang xảy ra. Tôi đã có thể thực hiện điều này bằng cách gọi trực tiếp nút:Gulp: nhắm mục tiêu để gỡ lỗi các kiểm tra mocha
node --debug-brk node_modules/gulp/bin/gulp.js test
Nhưng tôi muốn một mục tiêu ngụm mà kết thúc tốt đẹp này đối với tôi, ví dụ .:
gulp.task('test-debug', 'Run unit tests in debug mode', function (cb) {
// todo?
});
Ý tưởng? Tôi muốn tránh một tập lệnh bash
hoặc một số tệp riêng biệt khác vì tôi đang cố gắng tạo lại gulpfile
có thể sử dụng lại với các mục tiêu có thể sử dụng được bởi một người không biết gulp.
Đây là hiện gulpfile.js
// gulpfile.js
var gulp = require('gulp'),
mocha = require('gulp-mocha'),
gutil = require('gulp-util'),
help = require('gulp-help');
help(gulp); // add help messages to targets
var exitCode = 0;
// kill process on failure
process.on('exit', function() {
process.nextTick(function() {
var msg = "gulp '" + gulp.seq + "' failed";
console.log(gutil.colors.red(msg));
process.exit(exitCode);
});
});
function testErrorHandler(err) {
gutil.beep();
gutil.log(err.message);
exitCode = 1;
}
gulp.task('test', 'Run unit tests and exit on failure', function() {
return gulp.src('./lib/*/test/**/*.js')
.pipe(mocha({
reporter: 'dot'
}))
.on('error', function (err) {
testErrorHandler(err);
process.emit('exit');
});
});
gulp.task('test-watch', 'Run unit tests', function (cb) {
return gulp.src('./lib/*/test/**/*.js')
.pipe(mocha({
reporter: 'min',
G: true
}))
.on('error', testErrorHandler);
});
gulp.task('watch', 'Watch files and run tests on change', function() {
gulp.watch('./lib/**/*.js', ['test-watch']);
});
có thể sử dụng childprocess.exec? http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback –
@BrianGlaz đó là một ý tưởng hay. Nhược điểm duy nhất là bạn không nhận được đầu ra từ quá trình cho đến khi nhiệm vụ được hoàn thành thay vì khi bạn đi. Có cách nào để làm điều này trong khi nhận được sản lượng tiến bộ để stdout? –
Khám phá child_process.spawn() http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options. nó rất giống nhưng hoạt động như một bộ phát sự kiện cho phép bạn đính kèm các cuộc gọi lại. Kiểm tra liên kết để biết ví dụ. –