こんにちは、私は現在 cucumber/aruba のテストをいじっていて、今のところとても気に入っています。しかし、インタラクティブ性の問題に遭遇しました。
私のアプリはフォルダーの変更を監視し、現時点で「ファイルが変更されました」などを単に出力します。
入力jsbreeze watchFolder foo
すると、アプリはフォルダーの監視を開始し、これをコンソールに出力します。
「見ている:フー」
次のようにキュウリ/アルバでこれを簡単にテストできます。
Scenario: jsbreeze should be able to watch a folder
Given a directory named "foo"
When I run `jsbreeze watchFolder foo` interactively
And I wait for output to contain "Watching: foo"
しかし、実際に変更を検出するかどうかをテストしたいので、このようなことができると思っていました
Scenario: jsbreeze should be able to watch multiple folders
Given a directory named "foo"
When I run `jsbreeze watchFolder foo,.` interactively
And I wait for output to contain "Watching: foo,."
Then I run `touch foo/test.js`
And I wait for output to contain "Change detected"
しかし、これはうまくいかないようです。その瞬間にアプリがインタラクティブに実行されるため、タッチのようなコマンドを実際に実行できないためだと思います。誰かがそのような問題を抱えたことがあり、それを回避する方法を知っているでしょうか?
完全なコードは github にあります: github-link
すべての助けは大歓迎です
編集:少し進歩しました
touch コマンドを実行する子プロセスを生成する新しいステップを作成しました。タッチされたファイルが foo フォルダー内に作成されていることがはっきりとわかりますが、私のシナリオではまだ出力が表示されません。
私のステップは次のようになります。
When /^I run "([^"]*)" in a new process$/ do |command|
@process = ChildProcess.send(:build,*command.split(' '))
@process.start
sleep 10
end
そして私のシナリオ:
Scenario: jsbreeze should be able to watch multiple folders
Given a directory named "foo"
When I run `jsbreeze watchFolder foo,.` interactively
And I run "touch tmp/aruba/foo/test.js" in a new process
And I wait for output to contain "Change detected"