📅  最后修改于: 2020-11-02 03:22:49             🧑  作者: Mango
测试驱动开发(TDD)是一种在编写任何实际配方代码之前编写单元测试的方法。该测试应该是真实的,并且应该验证配方的作用。它实际上应该失败,因为没有开发任何配方。一旦制定了配方,则测试将通过。
ChefSpec基于流行的RSpec框架构建,并提供了用于测试Chef配方的量身定制的语法。
步骤1-创建一个包含chefSpec gem的gem文件。
vipin@laptop:~/chef-repo $ subl Gemfile
source 'https://rubygems.org'
gem 'chefspec'
步骤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!
步骤3-创建规格目录。
vipin@laptop:~/chef-repo $ mkdir cookbooks//spec
步骤4-创建规格
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
步骤5-验证ChefSpec。
vipin@laptop:~/chef-repo $ rspec cookbooks//spec/default_spec.rb
F
Failures:
1) ::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 '
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
步骤6-编辑食谱默认食谱。
vipin@laptop:~/chef-repo $ subl cookbooks//recipes/default.rb
template '/tmp/greeting.txt' do
variables greeting: 'Hello!'
end
步骤7-创建模板文件。
vipin@laptop:~/chef-repo $ subl cookbooks/< Cookbook Name>/recipes/default.rb
!
步骤8-再次运行rspec。
vipin@laptop:~/chef-repo $ rspec cookbooks//spec/default_spec.rb
.
Finished in 0.10142 seconds
1 example, 0 failures
为了使其正常工作,我们首先需要设置基础架构以将RSpec与Chef一起使用。然后,我们需要ChefSpec Ruby gem,并且食谱需要一个名为spec的目录,所有测试都将保存在该目录中。