Ich habe ein Projekt, um eine Vorlage Ruby-Projekt zu erstellen.wie Bundler Befehle aus einem Serverspec/RSpec Test aufrufen
Ich verwende Serverspec und möchte das Verhalten der Vorlage überprüfen.
Die Verwendung von command(`rake -T`)
schlägt jedoch fehl. Wenn ich den Befehl manuell ausführe, funktioniert es wie erwartet.
Debuggen, wenn der Test in Serverspec läuft, findet es die falschen Gemfile
- das Gemfile von meinem Projekt verwendet (.
), nicht das erzeugte Verzeichnis (target/sample_project
).
Wie kann ich rake
oder bundler
Befehle mit einem Serverspec/Rspec Test aufrufen?
Beispielcode:
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
Könnten Sie 'cd target/sample_project && rake && cd -' zum Befehl hinzufügen? – Kris
Ich habe das versucht. Ich habe tatsächlich einen runden Hook hinzugefügt, um das aktuelle Verzeichnis zu ändern: 'around (: example) do Dir.chdir (project_dir) end'. Dies funktioniert wie erwartet - ich habe ein anderes Beispiel, um zu überprüfen, ob das Arbeitsverzeichnis wie erwartet ist. – Tim
Der Hook funktioniert möglicherweise nicht, weil ein neuer untergeordneter Prozess gestartet wird, der möglicherweise nicht dasselbe aktuelle Arbeitsverzeichnis wie der übergeordnete Prozess hat. Haben Sie versucht, das 'cd' in den Befehl einzufügen, damit es im Kontext des untergeordneten Prozesses ausgeführt wird? – Kris