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