How can I test my LWRP using ChefSpec?

I created my own LWRP, but when I ran the ChefSpec tag. He does not know my LWRP actions.

Here is my resource :

actions :install, :uninstall default_action :install attribute :version, :kind_of => String attribute :options, :kind_of => String 

Here is my supplier :

 def whyrun_supported? true end action :install do version = @new_resource.version options = @new_resource.options e = execute "sudo apt-get install postgresql-#{version} #{options}" @new_resource.updated_by_last_action(e.updated_by_last_action?) end 

And here is my ChefSpec unit test:

 require_relative '../spec_helper' describe 'app_cookbook::postgresql' do let(:chef_run) do ChefSpec::Runner.new do |node| node.set[:app][:postgresql][:database_user] = 'test' node.set[:app][:postgresql][:database_password] = 'test' node.set[:app][:postgresql][:database_name] = 'testdb' end.converge(described_recipe) end it 'installs postgresql 9.1 package' do expect(chef_run).to run_execute('sudo apt-get install postgresql-9.1 -y --force-yes') end end 

Here is the console output:

 app_cookbook::postgresql expected "execute[sudo apt-get install postgresql-9.1 -y --force-yes] with" action :run to be in Chef run. Other execute resources: ./spec/recipes/postgresql_spec.rb:23:in `block (2 levels) in <top (required)>' installs postgresql 9.1 package (FAILED - 1) Failures: 1) app_cookbook::postgresql installs postgresql 9.1 package Failure/Error: expect(chef_run).to run_execute('sudo apt-get install postgresql-9.1 -y --force-yes') expected "execute[sudo apt-get install postgresql-9.1 -y --force-yes] with" action :run to be in Chef run. Other execute resources: # ./spec/recipes/postgresql_spec.rb:23:in `block (2 levels) in <top (required)>' 1 example, 1 failure, 0 passed 

How can I say that ChefSpec is running a test with LWRP actions?

+6
source share
1 answer

You need to tell chefspec to enter your resource. You can do it as follows:

 require_relative '../spec_helper' describe 'app_cookbook::postgresql' do let(:chef_run) do ChefSpec::Runner.new(step_into: ['my_lwrp']) do |node| node.set[:app][:postgresql][:database_user] = 'test' node.set[:app][:postgresql][:database_password] = 'test' node.set[:app][:postgresql][:database_name] = 'testdb' end.converge(described_recipe) end it 'installs postgresql 9.1 package' do expect(chef_run).to run_execute('sudo apt-get install postgresql-9.1 -y --force-yes') end end 

You can replace my_lwrp with the resource you want to login to.

For more information, see LWRPS Testing at the README Chefspec Referee.

+12
source

All Articles