เชฟ - 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 ซึ่งการทดสอบทั้งหมดจะถูกบันทึกไว้