Serverspec 包检查始终 returns true
Serverspec package check always returns true
我正在尝试编写 serverspec 测试,通过使用带有 debian jessie box 的 chef、kitchen 和 vagrant 来检查食谱是否正在设置 mariadb-server。
食谱很简单:
# cookbooks/mariadb/recipes/server.rb
package 'mariadb-server' do
action :install
end
我写的规范是:
# cookbooks/mariadb/test/integration/default/serverspec/server_spec.rb
require 'spec_helper'
describe 'mariadb::server' do
context package('mariadb-server') do
it 'is installed' do
expect be_installed
end
end
end
但是,当 运行ning kitchen verify
时,无论包状态如何,这始终 returns 为真。如果我通过 ssh 进入 vagrant box 并删除包,那么 运行 kitchen verify
,我也会得到一个积极的结果。
即使我将包更改为某个随机字符串,例如context package('this-is-not-a-package') do
测试结果为真。
我做错了什么?
在更一般的意义上,这不遵循 RSpec 3 匹配器语法。
您可以考虑这样做:
describe 'mariadb::server' do
describe package('mariadb-server') do
it { expect(subject).to be_installed }
end
end
这看起来更干净,输出也更清晰,因为 serverspec 使用文档格式化程序进行 RSpec 输出。
为了进一步让您了解引擎盖下发生的事情,以便您了解这里发生的事情,而不是假设这一切都是魔术,这里是如何进行此类检查的通用模板:
describe method(argument) do
it { expect(subject).to be_boolean-matcher.with_chain(argument_two) }
end
对于你的情况(你没有使用 version
链,但我添加了它以获取额外信息)
- 方法:包
- 参数:mariadb-server
- 主题:将解析为包(mariadb-server)
- 布尔匹配器:已安装
- 链:版本
- argument_two: 1.2.3
我正在尝试编写 serverspec 测试,通过使用带有 debian jessie box 的 chef、kitchen 和 vagrant 来检查食谱是否正在设置 mariadb-server。
食谱很简单:
# cookbooks/mariadb/recipes/server.rb
package 'mariadb-server' do
action :install
end
我写的规范是:
# cookbooks/mariadb/test/integration/default/serverspec/server_spec.rb
require 'spec_helper'
describe 'mariadb::server' do
context package('mariadb-server') do
it 'is installed' do
expect be_installed
end
end
end
但是,当 运行ning kitchen verify
时,无论包状态如何,这始终 returns 为真。如果我通过 ssh 进入 vagrant box 并删除包,那么 运行 kitchen verify
,我也会得到一个积极的结果。
即使我将包更改为某个随机字符串,例如context package('this-is-not-a-package') do
测试结果为真。
我做错了什么?
在更一般的意义上,这不遵循 RSpec 3 匹配器语法。
您可以考虑这样做:
describe 'mariadb::server' do
describe package('mariadb-server') do
it { expect(subject).to be_installed }
end
end
这看起来更干净,输出也更清晰,因为 serverspec 使用文档格式化程序进行 RSpec 输出。
为了进一步让您了解引擎盖下发生的事情,以便您了解这里发生的事情,而不是假设这一切都是魔术,这里是如何进行此类检查的通用模板:
describe method(argument) do
it { expect(subject).to be_boolean-matcher.with_chain(argument_two) }
end
对于你的情况(你没有使用 version
链,但我添加了它以获取额外信息)
- 方法:包
- 参数:mariadb-server
- 主题:将解析为包(mariadb-server)
- 布尔匹配器:已安装
- 链:版本
- argument_two: 1.2.3