Serverspec包检查始终返回true

时间:2016-05-25 16:08:09

标签: chef chef-recipe test-kitchen serverspec

我正在尝试编写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测试结果为真。

我在这里做错了什么?

1 个答案:

答案 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链,但我添加了它以获取额外信息)

  • 方法:包
  • 参数:mariadb-server
  • subject:将解析为package(mariadb-server)
  • boolean-matcher:已安装
  • chain:version
  • argument_two:1.2.3