Тестирование сервера node.js в jasmine без вызова listen - PullRequest
3 голосов
/ 03 марта 2012

При попытке написать тесты для сервера узла с использованием jasmine и jasmine-node мои тесты останавливаются, когда я запрашиваю у сервера .listen(3000).Есть ли способ заставить listen запускать асинхронно, чтобы он не останавливал остальные тесты, все еще вызывая его из тестов?Может быть, я могу проверить ответы, даже не позвонив слушать?Какие-нибудь хорошие идеи / статьи для тестирования узлового сервера?Я видел фреймворк для экспресс-тестирования, но я хотел бы по возможности придерживаться jasmine.

Когда я вызываю «listen» на http или экспресс-сервере, он сидит и слушает.Когда в тесте вызывается .listen (), тест ожидает завершения этой команды, прежде чем перейти к следующей.Поскольку это просто прослушивание в том, что я предполагаю, что-то вроде цикла while (true), эта строка фактически никогда не заканчивается, чтобы тест перешел к следующему.

Простой сервер в coffeescript с использованием экспресс

class exports.Server

  constructor: (@port) ->
    express = require 'express'
    @express = express.createServer()
    io = require('socket.io').listen(@express)
    @express.use express.bodyParser()
    @status = "initialized"

  start: ->
    @express.listen @port
    console.log "Server listening on port " + @port
    @status = "running"

Простой тест Жасмин, также в кофе.Выполнено с жасминовым узлом.

Server = require("../src/server").Server

describe "server", ->
  server = new Server(3000)  

  it "initializes", ->
    expect(server.port).toEqual(3000)


  it "starts", ->
    server.start()
    console.log "FOO"  #never reached
...