Я совершенно новый для всего стека - javascript, node.js, coffeescript, nodeunit. Думаешь, я должен сделать это шаг за шагом? Вы, вероятно, правы, но я все равно не собираюсь этого делать.
Вот тестовый файл:
testCase = require('nodeunit').testCase
Server = require('./web').WebServer
Client = require('../lib/client').Client
Request = require('../lib/request').Request
OPTIONS = {host: 'localhost', port: 8080, path: '/', method: 'GET'}
SERVER = new Server OPTIONS.port
CLIENT = new Client
REQUEST = new Request OPTIONS
SERVER.start() # asynchronous!
module.exports = testCase
setUp: (callback) ->
callback()
tearDown: (callback) ->
callback()
testResponseBodyIsCorrect: (test) ->
test.expect 1
process.nextTick ->
CLIENT.transmit REQUEST #asynchronous!
process.nextTick ->
test.equal REQUEST.body, /Ooga/
test.done()
Внутренне это просто оболочка для библиотеки http. Я использую узел 0.4.11.
Это на самом деле не работает. Здесь есть два асинхронных вызова. Если я делаю это вручную в REPL для кофе, он работает, но узел узла работает намного быстрее, чем я, поэтому я сталкиваюсь с чем-то, что, если быть умным, я назову условием гонки. усмешка
Вот реализация 'forward':
Http = требуется 'http'
exports.Client = class Client
transmit: (request, callback = null) ->
req = Http.request request.options, (res) ->
res.setEncoding 'utf8'
res.on 'data', (chunk) ->
request.appendToResponseBody chunk
req.end()
console.log "Request sent!"
Мне нужно убедиться, что сервер привязан к порту, прежде чем запустить тест, и мне нужно убедиться, что ".transmit" завершил свои внутренние обратные вызовы, чтобы получить ответ, прежде чем я сделаю утверждение.
Каков чистый способ (или, по крайней мере, способ, который работает), чтобы сделать это?