เชฟ - ChefSpec

Test Driven Development (TDD)เป็นวิธีการเขียน unit test ก่อนที่จะเขียนรหัสสูตรอาหารจริง การทดสอบควรเป็นของจริงและควรตรวจสอบความถูกต้องของสูตรอาหาร มันควรจะล้มเหลวจริง ๆ เนื่องจากไม่มีการพัฒนาสูตรอาหาร เมื่อพัฒนาสูตรแล้วการทดสอบควรผ่าน

ChefSpec สร้างขึ้นบนเฟรมเวิร์ก RSpec ที่เป็นที่นิยมและนำเสนอไวยากรณ์ที่เหมาะสำหรับการทดสอบสูตรอาหารของเชฟ

การสร้าง ChefSpec

Step 1 - สร้างไฟล์อัญมณีที่มีอัญมณี chefSpec

vipin@laptop:~/chef-repo $ subl Gemfile 
source 'https://rubygems.org' 
gem 'chefspec'

Step 2 - ติดตั้งอัญมณี

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 - สร้างไดเร็กทอรีข้อมูลจำเพาะ

vipin@laptop:~/chef-repo $ mkdir cookbooks/<Cookbook Name>/spec

Step 4 - สร้าง Spec

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 - ตรวจสอบ 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 - แก้ไขสูตรเริ่มต้นของตำราอาหาร

vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb 
template '/tmp/greeting.txt' do 
   variables greeting: 'Hello!' 
end

Step 7 - สร้างไฟล์เทมเพลต

vipin@laptop:~/chef-repo $ subl cookbooks/< Cookbook Name>/recipes/default.rb 
<%= @greeting %> <%= node['platform'] %>!

Step 8 - เรียกใช้ rspec อีกครั้ง

vipin@laptop:~/chef-repo $ rspec cookbooks/<Cookbook Name>/spec/default_spec.rb 
. 
Finished in 0.10142 seconds 
1 example, 0 failures

มันทำงานอย่างไร

ก่อนอื่นเราต้องตั้งค่าโครงสร้างพื้นฐานพื้นฐานสำหรับการใช้ RSpec กับ Chef ก่อน จากนั้นเราต้องการอัญมณี ChefSpec Ruby และตำราอาหารต้องการไดเร็กทอรีที่เรียกว่า spec ซึ่งการทดสอบทั้งหมดจะถูกบันทึกไว้