私はテンプレートRubyプロジェクトを作成するプロジェクトを持っています。Serverspec/RSpecテストからbundlerコマンドを呼び出す方法
私はserverspecを使用しており、テンプレートの動作を確認する必要があります。
ただし、command(`rake -T`)
を使用すると失敗します。手動でコマンドを実行すると、期待どおりに動作します。
デバッグ、テストがServerspecで実行されている場合、それは間違ってGemfile
見つけた - それは、私のプロジェクト(.
)からではなく、生成ディレクトリ(target/sample_project
)をGemfileを使用しています。
Serverspec/Rspecテストでrake
またはbundler
コマンドを呼び出すにはどうすればよいですか?
サンプルコード:
require "spec_helper"
require 'serverspec'
require 'fileutils'
set :backend, :exec
set :login_shell, true
describe "Generated Template" do
output_dir='target'
project_dir="#{output_dir}/sample_project"
# Hooks omitted to create the sample_project
# and change working directory to `project_dir`
describe command('rake -T') do
its(:stdout) { should include "rake serverspec:localhost" }
its(:stdout) { should include "rake serverspec:my_app" }
end
end
コマンドに 'cd target/sample_project && rake && cd-'を追加できますか? – Kris
私はそれを試みました。私は実際に、現在のディレクトリを変更するためにaroundフックを追加しました。 'around(:example)do Dir.chdir(project_dir)end'です。これは期待どおりに動作します - 私は、作業ディレクトリが期待どおりであることを確認する別の例があります。 – Tim
新しい子プロセスが起動されるため、親プロセスと同じ現在の作業ディレクトリがない可能性があるため、フックが機能しない可能性があります。子プロセスのコンテキストで実行されるように 'cd'をコマンドの中に入れようとしましたか? – Kris