Проверка пакета Serverspec всегда возвращает true

Я пытаюсь написать тесты serverpec, которые проверяют, настраивает ли рецепт mariadb-сервер, используя шеф-повар, кухню и бродягу, с коробкой debian jessie.

Рецепт прост:

# 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

Однако при запуске kitchen verify это всегда возвращает true, независимо от состояния пакета. Если я захожу по ssh в vagrant box и удаляю пакет, а затем запускаю kitchen verify, я также получаю положительный результат.

Даже если я изменю пакет на какую-то случайную строку, например. context package('this-is-not-a-package') do результат теста верный.

Что я здесь делаю неправильно?


person pdu    schedule 25.05.2016    source источник


Ответы (1)


В более общем смысле это не соответствовало синтаксису сопоставителя RSpec 3.

Вы можете сделать это так:

describe 'mariadb::server' do
  describe package('mariadb-server') do
    it { expect(subject).to be_installed }
  end
end

Это выглядит чище и выводит чище, потому что serverpec использует средство форматирования документов для вывода RSpec.

Чтобы еще больше дать вам представление о том, что происходит под капотом, чтобы вы понимали, что здесь происходит, и не предполагали, что это все волшебство, вот общий шаблон того, как выполнять такие проверки:

describe method(argument) do
  it { expect(subject).to be_boolean-matcher.with_chain(argument_two) }
end

и для вашей ситуации (вы не использовали цепочку version, но я добавил ее для дополнительной информации)

  • метод: пакет
  • аргумент: mariadb-сервер
  • тема: разрешит пакет (mariadb-сервер)
  • логическое сопоставление: установлено
  • цепь: версия
  • аргумент_два: 1.2.3
person Matt Schuchard    schedule 25.05.2016