So, as mentioned, the let(:title) method is actually just for defined
types:
http://rspec-puppet.com/tutorial/#specifying_the_title_of_the_defined_type
Given you have a class, title could be coming from a fact, in which
case you could use use:
let(:facts) { {:title => 'foo'} }
Or it should be a parameterised class, in which case use:
let(:params) { {:title => 'foo'} }
(given the special nature of title these may not work, but demonstrate
how to pass values to different constructs)
Or as mentioned it should be a defined type, in which case use let(:title).
I'd probably recommend trying to write a test for one of your
real-world puppet modules as I think the issue is with the Puppet code
more than the tests.
For a bit more context around the difference between name and title
see the docs too:
https://docs.puppetlabs.com/puppet/latest/reference/lang_defined_types.html#title-and-name
Gareth
On 9 January 2015 at 22:08, Chris Galli <[email protected]> wrote:
> I've created a simple module to play with rspec-puppet, and I'm having
> trouble getting my tests to pass because it appears I can't set the value of
> $title -- It's always the name of my module.
>
> I think perhaps I'm not understanding something about $title in puppet or
> let( :title ) in rspec-puppet.
>
>
> Here's what I'm testing and the results I'm getting.
>
> Create module:
> $ puppet module generate --skip-interview poc-filez
>
>
>
> Module contents (poc-filez/manifests/init.pp):
> class filez {
>
> file { $title:
> # have also tried "${title}"
> ensure => "present",
> }
> }
>
>
>
>
> Spec contents (poc-filez/spec/classes/init_spec.rb)
> require 'spec_helper'
> describe 'filez' do
> expected_title = '/home/me/foo'
> let(:title) { expected_title }
> # have tried variations, e.g. let (:title) { "#{expected_title" }
>
>
> # this fails
> it { should contain_file("#{expected_title}") }
>
> # but when I use the module name, it passes, File[filez] is in the catalog
> # it { should contain_file("filez") }
> end
>
>
>
> .fixtures.yml contents:
> fixtures:
>
> repositories:
> #
> symlinks:
> filez: "#{source_dir}"
>
>
>
>
> Test results:
> $ rake spec
>
>
> Failures:
>
>
> 1) filez should contain File[/home/me/foo]
> Failure/Error: it { should contain_file("#{expected_title}") }
> expected that the catalogue would contain File[/home/me/foo]
>
>
>
> However, if I change the module to use $name, and pass $name as a parameter
> in the spec, then my tests pass, e.g.
>
> manifests/init.pp
> class filez {
> file { $name:
> ensure => "present",
>
> }
> }
>
>
> spec/classes/init_spec.rb
> require 'spec_helper'
> describe 'filez' do
> expected_title = '/home/me/foo'
> let(:params) {{ :name => expected_title }}
>
>
> # this passes
> it { should contain_file("#{expected_title}") }
>
>
> # this fails
> # it { should contain_file("filez") }
> end
>
>
>
> I've examined other projects that use rspec-puppet and let( :title ) and on
> the surface they seems very similar. But obviously, I'm missing something
> or not doing something correctly. Any insight would be greatly appreciated.
> I've got several legacy modules that use $title, so I'm hesitant to simply
> accept changing them to use name (unless of course that's the root of my
> problem).
>
> Much appreciated,
>
> Chris
>
>
> ps
> I'm using Ruby 2.1.5 on MAC OS X 10.9.5
>
> Version Info (from Gemfile.lock):
> GEM
> remote: https://rubygems.org/
> specs:
> CFPropertyList (2.2.8)
> diff-lcs (1.2.5)
> facter (2.3.0)
> CFPropertyList (~> 2.2.6)
> hiera (1.3.4)
> json_pure
> json_pure (1.8.1)
> metaclass (0.0.4)
> mocha (1.1.0)
> metaclass (~> 0.0.1)
> puppet (3.7.3)
> facter (> 1.6, < 3)
> hiera (~> 1.0)
> json_pure
> puppet-lint (1.1.0)
> puppet-syntax (1.3.0)
> rake
> puppetlabs_spec_helper (0.8.2)
> mocha
> puppet-lint
> puppet-syntax
> rake
> rspec
> rspec-puppet
> rake (10.4.2)
> rspec (3.1.0)
> rspec-core (~> 3.1.0)
> rspec-expectations (~> 3.1.0)
> rspec-mocks (~> 3.1.0)
> rspec-core (3.1.7)
> rspec-support (~> 3.1.0)
> rspec-expectations (3.1.2)
> diff-lcs (>= 1.2.0, < 2.0)
> rspec-support (~> 3.1.0)
> rspec-mocks (3.1.3)
> rspec-support (~> 3.1.0)
> rspec-puppet (1.0.1)
> rspec
> rspec-support (3.1.2)
>
>
> PLATFORMS
> ruby
>
>
> DEPENDENCIES
> facter (>= 1.7.0)
> puppet (>= 3.3)
> puppet-lint (>= 0.3.2)
> puppetlabs_spec_helper (>= 0.1.0)
>
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/puppet-users/39cf1edd-aa4f-4370-8674-4b041e4cfa86%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
--
Gareth Rushgrove
@garethr
devopsweekly.com
morethanseven.net
garethrushgrove.com
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/CAFi_6yJHCKCGx3wrS0ZquBXoee%3DiP22oD1jn64Sjed57S4Z7Lw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.