Đầu bếp - ChefSpec
Test Driven Development (TDD)là một cách để viết bài kiểm tra đơn vị trước khi viết bất kỳ mã công thức thực tế nào. Bài kiểm tra phải là thật và phải xác thực những gì một công thức làm. Nó thực sự sẽ thất bại vì không có công thức nào được phát triển. Khi công thức được phát triển, bài kiểm tra sẽ vượt qua.
ChefSpec được xây dựng trên khung RSpec phổ biến và cung cấp một cú pháp phù hợp để kiểm tra công thức Chef.
Tạo ChefSpec
Step 1 - Tạo một tập tin đá quý có chứa đá quý ChefSpec.
vipin@laptop:~/chef-repo $ subl Gemfile
source 'https://rubygems.org'
gem 'chefspec'
Step 2 - Cài đặt đá quý.
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 - Tạo một thư mục đặc tả.
vipin@laptop:~/chef-repo $ mkdir cookbooks/<Cookbook Name>/spec
Step 4 - Tạo một thông số kỹ thuật
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 - Xác thực 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 - Chỉnh sửa công thức nấu ăn mặc định của Cookbooks.
vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb
template '/tmp/greeting.txt' do
variables greeting: 'Hello!'
end
Step 7 - Tạo một tệp mẫu.
vipin@laptop:~/chef-repo $ subl cookbooks/< Cookbook Name>/recipes/default.rb
<%= @greeting %> <%= node['platform'] %>!
Step 8 - Chạy lại rspec.
vipin@laptop:~/chef-repo $ rspec cookbooks/<Cookbook Name>/spec/default_spec.rb
.
Finished in 0.10142 seconds
1 example, 0 failures
Làm thế nào nó hoạt động
Để làm cho nó hoạt động, trước tiên chúng ta cần thiết lập cơ sở hạ tầng cơ sở để sử dụng RSpec với Chef. Sau đó, chúng ta cần đá quý ChefSpec Ruby và sách nấu ăn cần một thư mục có tên là spec, nơi tất cả các bài kiểm tra sẽ được lưu.