Chef - ChefSpec
Test Driven Development (TDD)ist eine Möglichkeit, einen Komponententest zu schreiben, bevor ein tatsächlicher Rezeptcode geschrieben wird. Der Test sollte real sein und validieren, was ein Rezept tut. Es sollte eigentlich scheitern, da kein Rezept entwickelt wurde. Sobald das Rezept entwickelt ist, sollte der Test bestehen.
ChefSpec basiert auf dem beliebten RSpec-Framework und bietet eine maßgeschneiderte Syntax zum Testen des Chef-Rezepts.
ChefSpec erstellen
Step 1 - Erstellen Sie eine Gem-Datei mit dem ChefSpec-Gem.
vipin@laptop:~/chef-repo $ subl Gemfile
source 'https://rubygems.org'
gem 'chefspec'
Step 2 - Installieren Sie den Edelstein.
vipin@laptop:~/chef-repo $ bundler install
Fetching gem metadata from https://rubygems.org/
...TRUNCATED OUTPUT...
Installing chefspec (1.3.1)
Using bundler (1.3.5)
Your bundle is complete!
Step 3 - Erstellen Sie ein Spezifikationsverzeichnis.
vipin@laptop:~/chef-repo $ mkdir cookbooks/<Cookbook Name>/spec
Step 4 - Erstellen Sie eine Spezifikation
vipin@laptop:~/chef-repo $ subl
cookbooks/my_cookbook/spec/default_spec.rb
require 'chefspec'
describe 'my_cookbook::default' do
let(:chef_run) {
ChefSpec::ChefRunner.new(
platform:'ubuntu', version:'12.04'
).converge(described_recipe)
}
it 'creates a greetings file, containing the platform
name' do
expect(chef_run).to
create_file_with_content('/tmp/greeting.txt','Hello! ubuntu!')
end
end
Step 5 - Überprüfen Sie ChefSpec.
vipin@laptop:~/chef-repo $ rspec cookbooks/<Cookbook Name>/spec/default_spec.rb
F
Failures:
1) <CookBook Name> ::default creates a greetings file, containing the platform name
Failure/Error: expect(chef_run.converge(described_recipe)).to
create_file_with_content('/tmp/greeting.txt','Hello! ubuntu!')
File content:
does not match expected:
Hello! ubuntu!
# ./cookbooks/my_cookbook/spec/default_spec.rb:11:in `block
(2 levels) in <top (required)>'
Finished in 0.11152 seconds
1 example, 1 failure
Failed examples:
rspec ./cookbooks/my_cookbook/spec/default_spec.rb:10 # my_
cookbook::default creates a greetings file, containing the
platform name
Step 6 - Standardrezept für Kochbücher bearbeiten.
vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb
template '/tmp/greeting.txt' do
variables greeting: 'Hello!'
end
Step 7 - Erstellen Sie eine Vorlagendatei.
vipin@laptop:~/chef-repo $ subl cookbooks/< Cookbook Name>/recipes/default.rb
<%= @greeting %> <%= node['platform'] %>!
Step 8 - Führen Sie die rspec erneut aus.
vipin@laptop:~/chef-repo $ rspec cookbooks/<Cookbook Name>/spec/default_spec.rb
.
Finished in 0.10142 seconds
1 example, 0 failures
Wie es funktioniert
Damit es funktioniert, müssen wir zuerst die Basisinfrastruktur für die Verwendung von RSpec mit Chef einrichten. Dann müssen wir ChefSpec Ruby Gem und das Kochbuch benötigt ein Verzeichnis namens spec, in dem alle Tests gespeichert werden.