私は、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 を使用しています。これは実際には機能しません。ここには 2 つの非同期呼び出しがあります。コーヒー REPL でこれを手動で行うと、動作しますが、nodeunit は私よりもはるかに高速であるため、競合状態と呼ぶ何かに遭遇します。ニヤニヤ
「送信」の実装は次のとおりです。 Http = require '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" が内部コールバックを完了していることを確認する必要があります。
これを行うためのクリーンな方法 (または少なくとも機能する方法) は何ですか?