追記
下記の問題は hubot@2.9.3
で解消されました。現在は同期的に読み込まれます。
問題
Hubot の Help の表示をテストしようと loadHubotScripts
/ load
/ loadFile
しても Help が読み込まれない。
robot = new Robot(...)
robot.adapter.on 'connected', =>
robot.load path.resolve(__dirname, '../../src/scripts')
# この時点では help は読み込まれていない。script 自体は読み込まれているのに!
robot.run()
解決策
読み込み後、setTimeout などでタイミングをずらす。
robot = new Robot(...)
robot.adapter.on 'connected', =>
robot.load path.resolve(__dirname, '../../src/scripts')
# この無意味に思える setTimeout が重要。
setTimeout ->
# ここなら help が読み込まれている。
, 10
robot.run()
原因
これは Hubot 本体の実装の不備である。 Hubot スクリプト自体は同期的に require()
するのに対し、Hubot スクリプトのコメントは Robot#parseHelp()
内で fs.readFile()
で非同期に読み込まれることに起因する。
おそらくタイミングをそろえることが望ましく、両方とも非同期にしてしまい完了を通知するようにするか、両方とも同期的にするかが良いと思う。
ちなみに修正用の PR ( https://github.com/github/hubot/issues/759 & https://github.com/github/hubot/pull/762 )も存在するが、マージされていないので、現状、上記のような解決策が必要になる。
参考
-
bouzuya/hubot-script-boilerplate
- 同等のロジックを組み込んでいる。
まとめ
でも、まあ、そんなところを厳密にしたいユーザーはそうそう居ないよね。