2015-10-13 2 views
1

Я пытаюсь написать некоторые тесты на основе опросов для моего приложения «Экспресс-экспресс».server.close() не работает при разрыве Vow

Вот тестовый источник:

var vows = require('vows'); 
var assert = require('assert'); 
var startApp = require('./lib/start-app.js'); 

var suite = vows.describe('tournaments'); 

suite.addBatch({ 
    "When we setup the app": { 
     topic: function() { 
      return startApp(); 
     }, 
     teardown: function(topic) { 
      if (topic && topic.close) { 
       topic.close(); 
      } 
     }, 
     "it works": function(topic) { 
      assert.isObject(topic); 
     } 
    } 
}); 

suite.run(); 

И вот start-app.js:

var app = require('../../app.js'); 

function start() { 
    var server = app.listen(56971, 'localhost'); 
    return server; 
} 

module.exports = start; 

app.js экспортирует регулярное приложение Express.js, созданный с express().

Проблема заключается в том, что всякий раз, когда я запускаю тест, topic.close() не работает в функции разрыва, и тест вешает навсегда после достижения успеха. Я пробовал искать в Интернете и добавлять много лотов console.log с, все безрезультатно.

Я нахожусь в Windows x64 build Node.js 4.2.0, и я использую [email protected] и [email protected].

Любая идея, как я могу заставить мой тест перестать висит?

+0

Одинаковая проблема здесь, тест построен на Travis навеки. Вы нашли решение? –

+0

@FernandoPiancastelli Я никогда не находил правильного решения, но, как грязный хак, вызов '.unref()' объекта 'topic'« исправил »это. Я подозреваю, что есть ошибка где-то, возможно, в ядре Node ... – strugee

ответ

1

Вот что я сделал, чтобы решить проблему в проекте, в котором я участвовал: окончательную партию, чтобы закрыть сервер.

suite.addBatch({ 
    'terminate server': { 
    topic: function() { 
     server.close(this.callback); // this is a regular node require(`http`) server, reused in several batches 
    }, 
    'should be listening': function() { 
     /* This test is necessary to ensure the topic execution. 
     * A topic without tests will be not executed */ 
     assert.isTrue(true); 
    } 
    } 
}).export(module); 

Перед тем, как добавить этот тест, набор никогда не закончится. Вы можете проверить результаты на https://travis-ci.org/fmalk/node-static/builds/90381188

+0

приятно, но это не решает мою проблему, потому что сервер используется в качестве темы. поэтому нет ссылки на него за пределами партии. – strugee

+0

Это похоже на открытую ошибку [link] (https://github.com/vowsjs/vows/issues/229), где разрывание не будет вызываться, если ваш 'topic()' не вызывает это. callback'. Кстати, мой код называет это. Если я правильно напомню виртуальную машину узла, если вы создаете другую тему, в другой группе, которая снова возвращает 'starApp()' и сразу же закрывает ее, она может работать, поскольку она будет обрабатывать ваш запрос 'require ('./ lib/start- app.js ') 'как одноэлементный, и, следовательно, закрыть его только слушателем. –

 Смежные вопросы

  • Нет связанных вопросов^_^