2015-10-17 27 views
10

Tôi mới thành nút và phát triển trong bất kỳ loại môi trường "thích hợp" nào. Tôi đã cài đặt gói gulp cho dự án hiện tại của tôi, cùng với mocha và một vài mô-đun khác. Đây là gulpfile.js của tôi:Gulp bị treo sau khi "Hoàn tất"

var gulp = require('gulp'); 
var mocha = require('gulp-mocha'); 
var eslint = require('gulp-eslint'); 

gulp.task('lint', function() { 
    return gulp.src(['js/**/*.js']) 
     // eslint() attaches the lint output to the eslint property 
     // of the file object so it can be used by other modules. 
     .pipe(eslint()) 
     // eslint.format() outputs the lint results to the console. 
     // Alternatively use eslint.formatEach() (see Docs). 
     .pipe(eslint.format()) 
     // To have the process exit with an error code (1) on 
     // lint error, return the stream and pipe to failOnError last. 
     .pipe(eslint.failOnError()); 
}); 

gulp.task('test', function() { 
    return gulp.src('tests/test.js', {read: false}) 
     // gulp-mocha needs filepaths so you can't have any plugins before it 
     .pipe(mocha({reporter: 'list'})); 
}); 

gulp.task('default', ['lint','test'], function() { 
    // This will only run if the lint task is successful... 
}); 

Khi tôi chạy 'gulp', có vẻ như đã hoàn thành tất cả nhiệm vụ của mình nhưng bị treo. Tôi phải ctrl + c để trở lại dấu nhắc lệnh. Tôi làm cách nào để hoàn thành đúng cách?

+0

Bạn chạy bất kỳ trong những nhiệm vụ của mình ('ngụm test',' ngụm lint'), làm họ treo? Tôi đã cắt và dán mã của bạn ở đây và không có vấn đề gì khi chạy nó. Không có gì bị treo. – Louis

+0

Tôi sẽ thử điều này sau, cảm ơn. – Ooberdan

Trả lời

15

Xin lỗi, mọi người! Hóa ra rằng điều này được giải quyết trong gulp-mocha FAQ. Trích dẫn:

bộ thử nghiệm không thoát

Nếu bộ kiểm tra của bạn không được thoát khỏi nó có thể là vì bạn vẫn có một callback kéo dài, thường gây ra bởi một kết nối cơ sở dữ liệu mở. Bạn nên đóng kết nối này hoặc làm như sau:

gulp.task('default', function() { 
    return gulp.src('test.js') 
     .pipe(mocha()) 
     .once('error', function() { 
      process.exit(1); 
     }) 
     .once('end', function() { 
      process.exit(); 
     }); 
}); 
2

Thêm câu lệnh trả lại bên trong tác vụ gulp. Hoặc chạy gọi lại.

gulp.task('default', ['lint','test'], function (next) { 
    // This will only run if the lint task is successful... 
    next(); 
}); 
+0

Tôi đã thử cả gọi lại và thêm trả lại không có lịch phát sóng. – Ooberdan

3

Nếu bạn không chạy bất cứ điều gì sau khi gulp-mocha, giải pháp được chấp nhận sẽ làm việc cho bạn. Tuy nhiên, nếu bạn cần để chạy các nhiệm vụ sau gulp-mocha (ví dụ chạy thử nghiệm mocha trước khi triển khai một xây dựng) đây là một giải pháp mà sẽ ngăn chặn gulp từ treo vô thời hạn trong khi vẫn cho phép nhiệm vụ để chạy sau khi gulp-mocha:

gulp.on('stop',() => { process.exit(0); }); 
gulp.on('err',() => { process.exit(1); }); 

này hoạt động vì gulpinherits từ orchestrator trong đó emits the events sau khi tất cả tác vụ đã chạy đến hoàn thành hoặc lỗi, tương ứng.

2

Sau khi nâng cấp lên mocha 4, tôi có thể giải quyết vấn đề này bằng cách chuyển --exit tới mocha.

Xem https://boneskull.com/mocha-v4-nears-release/#mochawontforceexit để biết thêm thông tin.

Khi sử dụng ngụm-mocha, thêm tùy chọn như exit: true như trong:

gulp.task('test', function() { 
    return gulp.src(['tests/**/*.spec.js'], {read: false}) 
    .pipe(mocha({ exit: true })); 
}); 
Các vấn đề liên quan