Тестирование ресурсов ChefSpec и Ark

Я начинаю тестировать с помощью chefspec, который, по моему мнению, является действительно простым и надежным тестовым фреймворком. Но у меня возникли некоторые проблемы с тестированием ресурсов ковчега. У меня есть этот default_spec.rb

require 'chefspec'
require_relative 'spec_helper'

describe 'df-maven::default' do
  let (:chef_run) { ChefSpec::Runner.new.converge(described_recipe) }
  it 'should run ark' do
    expect(chef_run).to put_ark #'described_'
  end
end

Какой тест я хочу для своего рецепта df-maven::default:

include_recipe 'java::default'
include_recipe 'ark::default'

mvn_version = node['df-maven']['version'].to_s

ark 'maven' do
  url      node['df-maven'][mvn_version]['url']
  checksum node['df-maven'][mvn_version]['checksum']
  path     node['df-maven']['m2_home']
  version  node['df-maven'][mvn_version]['version']
  has_binaries ['bin/mvn']
  append_env_path true
  action :put
end

Но когда я запускаю тест, я получаю ошибку undefined local variable or method 'put_ark'.

Затем я добавил это в свой spec_helper (так как я думаю, что сопоставители должны сработать):

require 'chefspec'

module ChefSpec
  module Matchers
    RSpec::Matchers.define :put_ark do |package_name|
      match do |chef_run|
        chef_run.resources.any? do |resource|
          resource_type(resource) == 'ark' and resource.name == package_name
        end
      end
    end
  end
end

Но я получаю ошибку undefined method resources' for #<ChefSpec::Runner:0x40a2650>

На практике он делает то, что от него требуется, но меня попросили начать делать тесты для всех моих кулинарных книг, поэтому я решил начать с моей кулинарной книги df-maven.

В любом случае, я думаю, что мне нужно определить сопоставители, но я не понимаю, как это сделать и сделать так, чтобы мои тесты прошли.


person JGutierrezC    schedule 11.06.2014    source источник
comment
@Rob3 Пожалуйста, перестаньте предлагать мелкие правки. У вас есть полная история предложений изменений, касающихся только заглавных букв I. Это не нормально, даже если большинство из них получают одобрение роботов.   -  person Sergiu Paraschiv    schedule 12.06.2014
comment
@Sergiu Paraschiv строчная буква i в английском языке является грамматической ошибкой. Пишите заглавными буквами I это правильный путь. Кто написал правильное предложение, передал правильную идею.   -  person Robert    schedule 12.06.2014


Ответы (1)


Как указано в README ChefSpec, в libraries/matchers.rb (для автозагрузки):

if defined?(ChefSpec)
  def put_ark(resource_name)
    ChefSpec::Matchers::ResourceMatcher.new(:ark, :put, resource_name)
  end
end

Если вы не хотите распространять этот сопоставитель, вы можете поместить его в spec/support/something.rb:

def put_ark(resource_name)
  ChefSpec::Matchers::ResourceMatcher.new(:ark, :put, resource_name)
end

А затем потребовать «spec/support/something» в файле spec_helper.rb.

Это сделает put_ark сопоставление ресурсов/

person sethvargo    schedule 12.06.2014