Это интересный вопрос, потому что именно прошлой ночью я сделал то, что ты хочешь сделать.У меня есть небольшое приложение CoffeScript Node.js, которое написано так, как вы показали.Затем я произвел рефакторинг, создав следующее: app.coffee
:
# ... Imports
app = express.createServer()
# Create a helper function
exports.start = (options={port:3000, logfile:undefined})->
# A function defined in another module which configures the app
conf.configure app, options
app.get '/', index.get
# ... Other routes
console.log 'Starting...'
app.listen options.port
Теперь у меня есть index.coffee
(эквивалентно вашему server.coffee
), например:
require('./app').start port:3000
Затем я написал несколько тестов, используя Jasmine-node и Zombie.js .Тестовая среда отличается, но принцип тот же:
app = require('../../app')
# ...
# To avoid annoying logging during tests
logfile = require('fs').createWriteStream 'extravagant-zombie.log'
# Use the helper function to start the app
app.start port: 3000, logfile: logfile
describe "GET '/'", ->
it "should have no blog if no one was registered", ->
zombie.visit 'http://localhost:3000', (err, browser, status) ->
expect(browser.text 'title').toEqual 'My Title'
asyncSpecDone()
asyncSpecWait()
Суть в том, что я сделал и предложил бы создать функцию в модуле, который запускает сервер.Затем вызывайте эту функцию там, где вы хотите.Я не знаю, если это «хороший дизайн», но он работает и кажется читабельным и практичным для меня.
Кроме того, я подозреваю, что в Node.js и CoffeScript пока что нет «хорошего дизайна».Это совершенно новые, очень инновационные технологии.Конечно, мы можем «чувствовать, что что-то не так» - как в ситуации, когда двум разным людям не понравился дизайн и он изменил его.Мы можем чувствовать «неправильный путь», но это не значит, что уже есть «правильный путь».Подводя итог, я полагаю, что мы должны будем придумать некоторые «правильные пути» в вашем развитии:)
(Но также полезно спросить о хороших способах ведения дел. Может быть, у кого-то есть хорошая идея иобщественное обсуждение будет полезно для других разработчиков.)