为什么我会得到木偶rspec';类不存在';什么时候?
我用下面的为什么我会得到木偶rspec';类不存在';什么时候?,rspec,puppet,rspec-puppet,Rspec,Puppet,Rspec Puppet,我用下面的Gemfile设置了一个新的puppetdemo模块,当我运行一个简单的puppet rspec测试时,它按照预期工作 Gemfile source 'https://rubygems.org' if puppetversion = ENV['PUPPET_GEM_VERSION'] gem 'puppet', puppetversion, :require => false else gem 'puppet', '3.7.5' end gem 'metadat
Gemfile
设置了一个新的puppetdemo
模块,当我运行一个简单的puppet rspec测试时,它按照预期工作
Gemfile
source 'https://rubygems.org'
if puppetversion = ENV['PUPPET_GEM_VERSION']
gem 'puppet', puppetversion, :require => false
else
gem 'puppet', '3.7.5'
end
gem 'metadata-json-lint'
gem 'puppetlabs_spec_helper', '>= 0.1.0'
gem 'puppet-lint', '>= 1.0.0'
gem 'facter', '>= 1.7.0'
gem 'rspec-puppet-facts'
# rspec must be v2 for ruby 1.8.7
if RUBY_VERSION >= '1.8.7' and RUBY_VERSION < '1.9'
gem 'rspec', '~> 2.0'
end
我得到以下错误:
vagrant$ bundle exec rake spec
/usr/bin/ruby -S rspec spec/classes/init_spec.rb --color
F
Failures:
1) silex with defaults for all parameters should contain Class[silex]
Failure/Error: it { should contain_class('silex') }
Puppet::Error:
Could not find class silex for centos65-box-1 on node centos65-box-1
# ./spec/classes/init_spec.rb:5
Finished in 0.31963 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/classes/init_spec.rb:5 # silex with defaults for all parameters should contain Class[silex]
这个类存在,我已经做了一个木偶运行。有人能帮我理解为什么会这样吗
更多信息
# Tree
.
├── files
│ └── httpd.patch
├── Gemfile
├── Gemfile.lock
├── lib
│ └── facter
│ └── vendor_dir.rb
├── manifests
│ ├── backup.pp
│ ├── config.pp
│ ├── init.pp
│ ├── install.pp
│ ├── params.pp
│ └── service.pp
├── metadata.json
├── Rakefile
├── README.md
├── spec
│ ├── classes
│ │ └── init_spec.rb
│ ├── fixtures
│ │ ├── manifests
│ │ │ └── site.pp
│ │ └── modules
│ └── spec_helper.rb
├── templates
│ └── var
│ └── config
│ └── settings.json.erb
└── tests
└── init.pp
# spec_helper.rb
require 'puppetlabs_spec_helper/module_spec_helper'
require 'rspec-puppet-facts'
include RspecPuppetFacts
#init_spec.rb
require 'spec_helper'
describe 'silex' do
context 'with defaults for all parameters' do
it { should contain_class('silex') }
end
end
因此,原来我在
fixtures
目录中缺少模块
,导致找不到类
错误
即时解决方案
# Tree
.
├── files
│ └── httpd.patch
├── Gemfile
├── Gemfile.lock
├── lib
│ └── facter
│ └── vendor_dir.rb
├── manifests
│ ├── backup.pp
│ ├── config.pp
│ ├── init.pp
│ ├── install.pp
│ ├── params.pp
│ └── service.pp
├── metadata.json
├── Rakefile
├── README.md
├── spec
│ ├── classes
│ │ └── init_spec.rb
│ ├── fixtures
│ │ ├── manifests
│ │ │ └── site.pp
│ │ └── modules
│ └── spec_helper.rb
├── templates
│ └── var
│ └── config
│ └── settings.json.erb
└── tests
└── init.pp
# spec_helper.rb
require 'puppetlabs_spec_helper/module_spec_helper'
require 'rspec-puppet-facts'
include RspecPuppetFacts
#init_spec.rb
require 'spec_helper'
describe 'silex' do
context 'with defaults for all parameters' do
it { should contain_class('silex') }
end
end
我必须运行rspec puppet init
,它将我的spec
目录(包括spec\u helper.rb
文件)更新为以下内容:
require 'rspec-puppet'
fixture_path = File.expand_path(File.join(__FILE__, '..', 'fixtures'))
RSpec.configure do |c|
c.module_path = File.join(fixture_path, 'modules')
c.manifest_dir = File.join(fixture_path, 'manifests')
c.environmentpath = File.join(Dir.pwd, 'spec')
end
Gemfile:
source 'https://rubygems.org'
if puppetversion = ENV['PUPPET_GEM_VERSION']
gem 'puppet', puppetversion, :require => false
else
gem 'puppet', '3.7.5'
end
gem 'metadata-json-lint'
gem 'puppetlabs_spec_helper', '>= 0.1.0'
gem 'puppet-lint', '>= 1.0.0'
gem 'facter', '>= 1.7.0'
gem 'rspec-puppet-facts'
# rspec must be v2 for ruby 1.8.7
if RUBY_VERSION >= '1.8.7' and RUBY_VERSION < '1.9'
gem 'rspec', '~> 2.0'
end
3.我必须将自动生成的Rakefile
更新为以下内容:
4.从模块根目录运行bundle exec rake spec您可以在模块根目录上运行“tree”吗,显示spec_助手的内容以及类spec的外观?您需要
spec/fixtures/modules
中的silex
模块,以便rspec puppet
能够加载它。测试模块似乎总是在puppet自动加载程序变得最烦人时进行,我希望有更好的方法来处理这个问题。@FelixFrank:看来我找到了问题的根源。我需要运行rspecpubletinit
,以确保它创建到清单、模板的必要符号链接。等等@aspiringCodeArtisan请将此作为答案添加并接受!
source 'https://rubygems.org'
if puppetversion = ENV['PUPPET_GEM_VERSION']
gem 'puppet', puppetversion, :require => false
else
gem 'puppet', '3.7.5'
end
gem 'metadata-json-lint'
gem 'puppetlabs_spec_helper', '>= 0.1.0'
gem 'puppet-lint', '>= 1.0.0'
gem 'facter', '>= 1.7.0'
gem 'rspec-puppet-facts'
# rspec must be v2 for ruby 1.8.7
if RUBY_VERSION >= '1.8.7' and RUBY_VERSION < '1.9'
gem 'rspec', '~> 2.0'
end
bundle exec rspec-puppet-init
require 'rubygems'
require 'puppetlabs_spec_helper/rake_tasks'
require 'puppet-lint/tasks/puppet-lint'
PuppetLint.configuration.send('disable_80chars')
PuppetLint.configuration.ignore_paths = ["spec/**/*.pp", "pkg/**/*.pp"]
desc "Validate manifests, templates, and ruby files"
task :validate do
Dir['manifests/**/*.pp'].each do |manifest|
sh "puppet parser validate --noop #{manifest}"
end
Dir['spec/**/*.rb','lib/**/*.rb'].each do |ruby_file|
sh "ruby -c #{ruby_file}" unless ruby_file =~ /spec\/fixtures/
end
Dir['templates/**/*.erb'].each do |template|
sh "erb -P -x -T '-' #{template} | ruby -c"
end
end