-1

我有一个创建模板 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
4

1 回答 1

1

Bundler 提供了运行此处记录的外部 shell 命令:http: //bundler.io/v1.3/man/bundle-exec.1.html

可以使用 rspec using 来运行 bundler/rake 任务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
于 2017-03-08T03:22:14.733 回答