2016-05-25 6 views
1

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

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

# 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, это всегда возвращает истину, независимо от состояния упаковки. Если я схожу в бродячий ящик и удалю пакет, тогда запустите kitchen verify, я также получаю положительный результат.

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

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

ответ

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-сервер
  • вопрос: будет решать пакет (MariaDB-сервер)
  • логическое_выражение согласовани: установлен
  • цепи: версия
  • argument_two: 1.2.3