[英]npm run script: node server.js && mocha test
您遇到這種情況的原因是因為node server.js
一直運行直到被殺死(Ctrl + C)或發生致命的未處理異常。 由於node
進程一直運行mocha test
永遠不會執行。
一種方法是使用gulp
作為任務運行器並利用實現gulp-nodemon
和gulp-nodemon
gulp-mocha
。 如果您之前從未使用過Gulp或者對任務運行者不熟悉,我建議您事先閱讀文檔,以了解它是如何工作的。
將下面的gulpfile.js
添加到您的應用程序中(根據需要調整一些設置)並使用下面的test
腳本修改package.json
腳本,這應該可以解決您的問題。
var gulp = require('gulp');
var mocha = require('gulp-mocha');
var nodemon = require('gulp-nodemon');
gulp.task('nodemon', (cb) => {
let started = false;
return nodemon({
script: 'server.js'
})
.on('start', () => {
if (!started) {
started = true;
return cb();
}
})
.on('restart', () => {
console.log('restarting');
});
});
gulp.task('test', ['nodemon'], function() {
return gulp.src('./test/*.js')
.pipe(mocha({reporter: 'spec' }))
once('error', function() {
process.exit(1);
})
.once('end', function() {
process.exit();
});
});
scripts
{
"scripts": {
"test": "NODE_ENV=development gulp test"
}
}
一個更優雅的解決方案,在我看來更好的選擇,就是重寫你的測試以使用supertest
。 基本上你用supertest
做的是將你的Express實例傳遞給它,並使用supertest
包對它運行斷言測試。
var mocha = require('mocha');
var request = require('supertest');
var server = require('server');
describe('test server.js', function() {
it('test GET /', function(done) {
request(server)
.get('/')
.expect(200, done);
});
});
將此代碼添加到您的測試用例中
after(function (done) {
done();
process.exit(1);
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.