To speed up the test of some complex recipes, I use an attribute to skip certain long-running installations when I only need to test the rest of the recipe.
We will pass Chef Attribute values into an InSpec test using environment variables.
Declare an attribute in the atrributes.rb file with a safe default value, to allow the execution of all steps if the value is not overridden
# Set this to true in the .kitchen.yml file to skip long-running tasks during local test default['quick_launch_for_test'] = false
Set the value in the suites: section of the kitchen.yml file to true to skip the long-running installations
attributes: quick_launch_for_test: true
Save the attribute value in an environment variable in the recipe to pass it to InSpec
# Store the value in an environment variable for the integration test env 'quick_launch_for_test' do value "#{node['quick_launch_for_test']}" end
Make a decision in the recipe based on the value of the attribute
if ( node['quick_launch_for_test'] != true ) ######################################### #Microsoft Visual Studio Community 2017 # ######################################### ... end
Read the value of the environment variable into a local variable in the InSpec test file. If the environment variable does not exist, or the value is not “true”, the value of the local_execution variable will be “false”.
local_execution = ( os_env('quick_launch_for_test').content() == 'true')
Use the if statement to make the decision in your InSpec test file
if !local_execution describe package('Microsoft Visual Studio Community 2017') do it { should be_installed } end end