Я начинаю тестировать с помощью 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.
В любом случае, я думаю, что мне нужно определить сопоставители, но я не понимаю, как это сделать и сделать так, чтобы мои тесты прошли.