Class: Busser::RunnerPlugin::Rspec

Inherits:
Base
  • Object
show all
Defined in:
lib/busser/runner_plugin/rspec.rb

Overview

A Busser runner plugin for Rspec.

Author:

Instance Method Summary collapse

Instance Method Details

#testObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/busser/runner_plugin/rspec.rb', line 32

def test
  rspec_path = suite_path('rspec').to_s

  setup_file = File.join(rspec_path, "setup-recipe.rb")

  Dir.chdir(rspec_path) do

    # Referred from busser-serverspec
    gemfile_path = File.join(rspec_path, 'Gemfile')
    if File.exists?(gemfile_path)
      # Bundle install local completes quickly if the gems are already found locally
      # it fails if it needs to talk to the internet. The || below is the fallback
      # to the internet-enabled version. It's a speed optimization.
      banner('Bundle Installing..')
      ENV['PATH'] = [ENV['PATH'], Gem.bindir, RbConfig::CONFIG['bindir']].join(File::PATH_SEPARATOR)
      bundle_exec = "#{File.join(RbConfig::CONFIG['bindir'], 'ruby')} " +
        "#{File.join(Gem.bindir, 'bundle')} install --gemfile #{gemfile_path}"
      run("#{bundle_exec} --local || #{bundle_exec}")
    end

    if File.exists?(setup_file)
      if !File.exists?("/opt/chef/bin/chef-apply")
        raise "You have a chef setup file at #{setup_file}, but /opt/chef/bin/chef-apply does not if exist"
      end
      run("/opt/chef/bin/chef-apply #{setup_file}")
    end

    runner = File.expand_path(File.join(File.dirname(__FILE__), "..", "rspec", "runner.rb"))
    run_ruby_script!("#{runner} -I #{rspec_path} -I #{rspec_path}/lib #{rspec_path}")
  end
end