2017-10-06 17 views
1

こんにちは皆さん、ありがとうございました。モカのテストは永遠に実行します

私はmochaとsupertestを使ってテストを実行しようとしていますが、動作してもテストは永遠に実行されます。これを避けるために、after()メソッドに1つの "process.exit(0)"を追加して正しくビルドできるようにしましたが、これは "分離"のために本当に間違っています(外見は悪いです:-))

マイpackage.json:

{ 
    "name": "application-name", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
    "start": "nodejs ./bin/www", 
    "test": "mocha" 
    }, 
    "dependencies": { 
    "body-parser": "~1.0.0", 
    "cookie-parser": "~1.0.1", 
    "debug": "~0.7.4", 
    "ejs": "~0.8.5", 
    "express": "~4.0.0", 
    "is-my-json-valid": "^2.16.1", 
    "knex": "^0.13.0", 
    "morgan": "~1.0.0", 
    "mysql": "^2.14.1", 
    "static-favicon": "~1.0.0" 
    }, 
    "devDependencies": { 
    "mocha": "^4.0.0", 
    "supertest": "^3.0.0", 
    "chai": "^4.1.2", 
    "util": "^0.10.3" 
    } 
} 

私のテスト:

var request = require('supertest'); 
var util = require('util'); 

describe('Endpoints', function() { 
    var server; 

    beforeEach(function() { 
    server = require('../app').listen(3000); 
    }); 

    afterEach(function(done) { 
    server.close(done); 
    }); 

    after(function(done){ 
    process.exit(0); // <-- THIS LOOKS REALLY BAD 
    }); 

    it('Success ', function(done) { 
    var deputy = {name:"Meu Nome", uf:"SP", site_id:"1", secondary_site_id:"2"} 
    request(server) 
     .post('/api/deputy') 
     .send(deputy) 
     .expect(200, done); 
    }); 

    it('Bad request ', function(done) { 
    var deputy = {naonome:"Nao deve funcionar"} 
    request(server) 
     .post('/api/deputy') 
     .send(deputy) 
     .expect(400, done); 
    }); 

}); 

テストが終了したことがない理由を任意のアイデア?

はあなたにすべての

EDIT感謝:

var express = require('express'); 
var path = require('path'); 
var favicon = require('static-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var routes = require('./routes/index'); 
var deputy = require('./routes/deputy'); 

var db = require('./server/db'); 
var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 

app.use(favicon()); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded()); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/api/deputy', deputy); 

/// catch 404 and forwarding to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

/// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('error', { 
      message: err.message, 
      error: err 
     }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: {} 
    }); 
}); 


module.exports = app; 
+1

'app.js'モジュールのコードを表示します。 – alexmac

+0

完了、質問に追加 –

答えて

1

特急ジェネレータによって生成され、私のapp.jsをたどるの接続がまだ実行されているデータベースのようですね。あなたはそれを閉じることができます

私は/ server/dbファイルから接続を取得できると仮定します。あなたがまだそれをしていない場合、それをエクスポートします。

私は自分自身をのmysql使用していないが、これは私が機能した後にMongoDBを使用するときにどのように見えるかです:テストはすべての方法を実行します

after(function (done) { 
    server.close(function() { 
     mongoose.connection.close(done) 
    }) 
}) 

私は、データベース接続を閉じていない場合終了することはありませんが、シェルには終了しないでください。

+0

あなたは正しいです。 mongooseの代わりにknexを使用していますので、 "after"ビットではmongoose.connection.close()の代わりにknex.destroy()でした。 –

関連する問題