我正在尝试编写serverspec测试,通过使用厨师,厨房和流浪汉,使用debian jessie盒来检查配方是否正在设置mariadb-server。
配方很简单:
grep("##$", test)
我写的规范是:
# 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
时,无论包状态如何,都始终返回true。如果我进入流浪盒并移除包裹,然后运行kitchen verify
,我也会得到一个正面的结果。
即使我将包更改为某个随机字符串,例如kitchen verify
测试结果为真。
我在这里做错了什么?
答案 0 :(得分:2)
从更一般的意义上说,这不遵循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
链,但我添加了它以获取额外信息)