如何从 Serverspec/RSpec 测试中调用捆绑器命令
how to invoke bundler commands from within a Serverspec/RSpec test
我有一个创建模板的项目ruby项目。
我正在使用 serverspec 并想验证模板的行为。
但是,使用 command(`rake -T`)
失败。如果我手动执行命令,它会按预期工作。
调试,当在Serverspec中测试运行时,发现错误Gemfile
- 它使用的是我项目中的Gemfile(.
),而不是生成的目录( target/sample_project
).
如何在 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
Bundler 提供 运行 外部 shell 命令,记录在此处:http://bundler.io/v1.3/man/bundle-exec.1.html
运行 bundler/rake 任务可以使用 rspec 使用 Bundler.with_clean_env
而不是 Serverspec.
require 'bundler'
require 'rspec'
RSpec.describe "Generated Template" do
output_dir='target'
project_dir="#{output_dir}/sample_project"
around(:example) do |example|
#Change context, so we are in the generated project directory
orig_dir=Dir.pwd
Dir.chdir(project_dir)
example.run
Dir.chdir(orig_dir)
end
around(:example) do |example|
Bundler.with_clean_env do
example.run
end
end
it "should include localhost" do
expect(`rake -T 2>&1`).to include "rake serverspec:localhost"
end
end
我有一个创建模板的项目ruby项目。
我正在使用 serverspec 并想验证模板的行为。
但是,使用 command(`rake -T`)
失败。如果我手动执行命令,它会按预期工作。
调试,当在Serverspec中测试运行时,发现错误Gemfile
- 它使用的是我项目中的Gemfile(.
),而不是生成的目录( target/sample_project
).
如何在 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
Bundler 提供 运行 外部 shell 命令,记录在此处:http://bundler.io/v1.3/man/bundle-exec.1.html
运行 bundler/rake 任务可以使用 rspec 使用 Bundler.with_clean_env
而不是 Serverspec.
require 'bundler'
require 'rspec'
RSpec.describe "Generated Template" do
output_dir='target'
project_dir="#{output_dir}/sample_project"
around(:example) do |example|
#Change context, so we are in the generated project directory
orig_dir=Dir.pwd
Dir.chdir(project_dir)
example.run
Dir.chdir(orig_dir)
end
around(:example) do |example|
Bundler.with_clean_env do
example.run
end
end
it "should include localhost" do
expect(`rake -T 2>&1`).to include "rake serverspec:localhost"
end
end