3

こんにちは、私は現在 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"
4

0 に答える 0