make システムを介して API をローカルにロードする必要があるテストがあります。これを行うには、を使用していchild_process.exec
ます。残念ながら、このコールバックはプロセスが終了した後にのみ実行されるため、テストが完了するまで API が必要です。これを機能させる方法がわかりません。
request = require "request"
child_process = require "child_process"
tsc = require "training_service_connector"
campaign = "happy"
strategy = campaign
port_number = 54340
service_conf_filename = tsc.writeServiceConfig(strategy, port_number)
exec_callback = (error, stdout, stderr) -> console.log ('stdout:\n' + stdout + '\nstderr:\n' + stderr + "\nerror:\n" + error)
child_process.exec("CONFIG=#{service_conf_filename} make run_bidder_service_runner", exec_callback)
secret = {}
setToken = (error, response, body) -> secret.token = body.token
details = {"email" : "email@email.com", "password" : "password", "sendImmediately" : false}
request.post {uri: "http://127.0.0.1:#{port_number}/authenticate", json: details}, setToken
これを REPL で 1 行ずつ実行すると正しく動作しますが、一度にすべて実行するとエラーが発生します。
opts = {uri: "http://127.0.0.1:#{port_number}/authenticate", json: details}
realtries = 0
val = 0
postAndCount = () -> console.log "#{realtries++}: {#{secret}}"; request.post(opts, setToken); clearInterval(val) if "token" of secret
val = setInterval(postAndCount, 2000)
console.log secret
これは機能します (物事を行うには非常に遠回りな方法ですが)、API が実際に準備される前に、このコードが対象とする関数が返ってしまうというさらなる問題があります。JSに何らかのトリガーを強制的に待機させる方法はありますか? sleep() または wait() または何かを返す前に関数を待機させる他の方法を備えたライブラリはありますか?
すべてのテストをトリガーするコールバックを使用して、この関数が対象とするテスト システム全体を再設計することは現実的ではありません。