2013-02-18 3 views
2

Я использую express.js версию 2.5.8 (из устаревшего кода), и я хочу проверить загрузку маршрута с помощью супертеста. У меня проблема с запущенным сервером, но не прерывается. Я запускаю свои тесты, используя jasmine-node, что указывает на то, что мое утверждение прошло успешно. Однако консоль показывает, что процесс все еще запущен.Совместим с express.js 2.5.8?

var request = require('supertest') 
    , express = require('express'); 

describe('Example Test', function() { 
    var app; 

    beforeEach(function() { 
    app = express.createServer(); 

    app.configure(function() { 
     app.set('port', process.env.PORT || 3000); 
     app.use(express.logger('dev')); 
     app.use(express.bodyParser()); 
     app.use(express.methodOverride()); 
    }); 

    app.get('/', function(req, res){ 
     res.send(200); 
    }); 
    }); 

    it('index should return 200', function(done) { 
    request(app) 
    .get('/') 
    .expect(200) 
    .end(function(err, res) { 
     expect(err).toBe(null); 
     done(); 
    }); 
    }); 
}); 

Этот пример адаптирован для использования с использованием express.js 3.x.x. Мое предположение заключается в том, что экспресс-сервер ведет себя по-разному, что приводит к тому, что он не закрывается, когда запрос завершается внутри теста. Я не знаю, как исправить эту проблему.

ответ

2

Сервер по-прежнему работает, потому что вы его нигде не закрываете. Просто добавьте app.close() в ваш end(function(){}), чтобы остановить экспресс-сервер. Если вы также хотите выйти из узла, используйте process.exit().

+0

Благодарим, @zeMirco. Я мог бы поклясться, что уже пробовал это решение. На самом деле у меня было 'app.close()' там в какой-то момент. Хотя, должно быть, он не был в правильном месте. – jneander