2014-10-03 63 views
3

我在使用ServerSpec在我的主廚食譜上運行集成測試時遇到了問題。當我試圖運行測試在今天,而不做任何改變,我得到了以下錯誤:廚師ServerSpec SpecInfra未初始化的常量名稱錯誤

TL;博士

/tmp/busser/suites/serverspec/spec_helper.rb:3:in <top (required)>': uninitialized constant SpecInfra (NameError) 

> [#] ---- Begin output of kitchen verify '(default)-.+' -p ---- 
> [#] STDOUT: -----> Starting Kitchen (v1.2.1) 
> [#] -----> Verifying <default-CentOS-70>... 
> [#]  Removing /tmp/busser/suites/serverspec 
> [#]  Uploading /tmp/busser/suites/serverspec/localhost/nodejs_spec.rb (mode=0644) 
> [#]  Uploading /tmp/busser/suites/serverspec/spec_helper.rb (mode=0644) 
> [#] -----> Running serverspec test suite 
> [#]  /opt/chef/embedded/bin/ruby -I/tmp/busser/suites/serverspec -I/tmp/busser/gems/gems/rspec-support-3.0.4/lib:/tmp/busser/gems/gems/rspec-core-3.0.4/lib -S /opt/chef/embedded/bin/rspec /tmp/busser/suites/serverspec/localhost/nodejs_spec.rb --color --format documentation 
> [#]  /tmp/busser/suites/serverspec/spec_helper.rb:3:in `<top (required)>': uninitialized constant SpecInfra (NameError) 
> [#]   from /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
> [#]   from /opt/chef/embedded/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
> [#]   from /tmp/busser/suites/serverspec/localhost/nodejs_spec.rb:1:in `<top (required)>' 
> [#]   from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/configuration.rb:1058:in `load' 
> [#]   from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/configuration.rb:1058:in `block in load_spec_files' 
> [#]   from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/configuration.rb:1058:in `each' 
> [#]   from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/configuration.rb:1058:in `load_spec_files' 
> [#]   from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/runner.rb:97:in `setup' 
> [#]   from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/runner.rb:85:in `run' 
> [#]   from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/runner.rb:70:in `run' 
> [#]   from /tmp/busser/gems/gems/rspec-core-3.0.4/lib/rspec/core/runner.rb:38:in `invoke' 
> [#]   from /tmp/busser/gems/gems/rspec-core-3.0.4/exe/rspec:4:in `<top (required)>' 
> [#]   from /opt/chef/embedded/bin/rspec:23:in `load' 
> [#]   from /opt/chef/embedded/bin/rspec:23:in `<main>' 
> [#]  /opt/chef/embedded/bin/ruby -I/tmp/busser/suites/serverspec -I/tmp/busser/gems/gems/rspec-support-3.0.4/lib:/tmp/busser/gems/gems/rspec-core-3.0.4/lib -S /opt/chef/embedded/bin/rspec /tmp/busser/suites/serverspec/localhost/nodejs_spec.rb --color --format documentation failed 
> [#]  Ruby Script [/tmp/busser/gems/gems/busser-serverspec-0.2.7/lib/busser/runner_plugin/../serverspec/runner.rb /tmp/busser/suites/serverspec] exit code was 1 
> [#] 
> [#] STDERR: >>>>>> Verify failed on instance <default-CentOS-70>. 
> [#] >>>>>> Please see .kitchen/logs/default-CentOS-70.log for more details 
> [#] >>>>>> ------Exception------- 
> [#] >>>>>> Class: Kitchen::ActionFailed 
> [#] >>>>>> Message: SSH exited (1) for command: [sh -c 'BUSSER_ROOT="/tmp/busser" GEM_HOME="/tmp/busser/gems" GEM_PATH="/tmp/busser/gems" GEM_CACHE="/tmp/busser/gems/cache" ; export BUSSER_ROOT GEM_HOME GEM_PATH GEM_CACHE; sudo -E /tmp/busser/bin/busser test'] 
> [#] >>>>>> ---------------------- 

有誰知道這是爲什麼發生?

按照評論:

require 'serverspec' 
# require 'specinfra' #I've tried both with and without this 

include SpecInfra::Helper::Exec 
include SpecInfra::Helper::DetectOS 

RSpec.configure do |c| 
    if ENV['ASK_SUDO_PASSWORD'] 
    require 'highline/import' 
    c.sudo_password = ask("Enter sudo password: ") { |q| q.echo = false } 
    else 
    c.sudo_password = ENV['SUDO_PASSWORD'] 
    end 
end 

該文件是爲每個使用該應用程序中規定的指令,並曾研發未改變。

回答

0

文件/tmp/busser/suites/serverspec/spec_helper.rb可能引用常量SpecInfra,但您尚未加載任何gem或Ruby文件實際定義的常量,因此該常量未定義。

我無法在SpecInfra發現很多文檔,但我想你只需要在shell中運行gem install specinfra安裝寶石,然後在其中發生錯誤的文件的頂部添加require 'specinfra'。這是解決這些類型錯誤的常用方法。

我假設spec_helper.rb是你在某些時候編寫的文件,它被serverspec複製到服務器,但我從來沒有使用過這個工具,所以我對它不瞭解太多。您需要確保將gem安裝/複製到運行測試的服務器,因此您可能需要將gem添加到serverspec的某個配置文件中。

+0

不幸的是,還沒有解決問題。此外,本週早些時候這個工作正在進行,我沒有改變代碼或測試。 – localhostv6 2014-10-03 17:16:38

+0

好吧,我想這些工具中的某位專家有機會出現,並且可以單獨從錯誤消息中發現您做錯了什麼,但如果不是這樣,那麼您最好能發佈更多關於你已經設置了所有東西,並從'spec_helper.rb'發佈實際的代碼。 – 2014-10-03 17:18:49

+0

它看起來像寶石被複制到'/ tmp/busser/gems';如果它沒有被刪除,你可以在那裏查看可用的內容。 – 2014-10-03 17:20:57

3

線程如果您使用serverspec 2+您需要刪除SpecInfra線和set命令替換:

require 'serverspec' 

set :backend, :exec 

RSpec.configure do |c| 
    c.before :all do 
    c.path = '/sbin:/usr/sbin' 
    end 
end 

# etc 
在我最新的例子PR

更多信息回購廚房。 - https://github.com/test-kitchen/guide-started-git-cookbook/pull/3

相關問題