【问题标题】:Chefspec unit-testingChefspec 单元测试
【发布时间】:2018-07-19 08:22:56
【问题描述】:

我不是开发人员,也是 Chef 的新手。

我创建了一个简单的食谱并在测试厨房中对其进行了测试,它运行良好,但是当我将它上传到 Jenkins 时它不会通过。

你能帮我指出我缺少什么吗?

Recipe:
# Recipe:: default
# Download VerneMQ
remote_file "#{Chef::Config[:file_cache_path]}/vernemq_1.4.0-1_amd64.deb" do
  source 'https://bintray.com/artifact/download/erlio/vernemq/deb/trusty/vernemq_1.4.0-1_amd64.deb'
end

# Install
dpkg_package 'vernemq_1.4.0-1_amd64.deb' do
  source "#{Chef::Config[:file_cache_path]}/vernemq_1.4.0-1_amd64.deb"
  action :install
end

# Service Start
service 'vernemq' do
  action [:enable, :start]
end

# Configurations
template '/etc/vernemq/vernemq.conf' do
  source 'vernemq.conf.erb'
  owner 'root'
  group 'root'
  mode '0644'
end

template '/etc/vernemq/vmq.passwd' do
  source 'vmq.passwd.erb'
end

这是我的单元测试。

Unit Test:
require 'spec_helper'
require 'chefspec'

describe 'vernemq::default' do
  let(:chef_run) { ChefSpec::SoloRunner.new(platform: 'ubuntu', version: '14.04').converge(described_recipe) }

  it 'downloads the remote_file' do
    expect(chef_run).to create_remote_file('#{Chef::Config[:file_cache_path]}/vernemq_1.4.0-1_amd64.deb')
  end

  it 'installs a dpkg_package' do
    expect(chef_run).to install_dpkg_package('vernemq')
  end

  it 'executes both actions' do
    expect(chef_run).to enable_service('vernemq')
    expect(chef_run).to start_service('vernemq')
  end

  it 'creates a file' do
    expect(chef_run).to create_directory('/etc/vernemq/vernemq.conf')
  end

  it 'creates a file' do
    expect(chef_run).to create_directory('/etc/vernemq/vmq.passwd')
  end
end

Jenkins 的错误

01:06:57 tm_vernemq::default 01:06:58 [2018-07-19T01:06:58-07:00] 警告:Chef::Provider::AptRepository 已经存在!无法从说明书 apt 为 LWRP 提供程序 apt_repository 创建弃用类 01:06:58 [2018-07-19T01:06:58-07:00] 警告:资源 sensitive 的属性 apt_repository 覆盖现有方法。请使用不同的属性名称。这将在 Chef 13 中引发异常。 (CHEF-11)/tmp/d20180719-10648-933ma2/cookbooks/apt/resources/repository.rb:54:in class_from_file'. 01:06:58 Please see https://docs.chef.io/deprecations_property_name_collision.html for further details and information on how to correct this problem. at /opt/chefdk/embedded/lib/ruby/gems/2.3.0/gems/chef-12.19.36/lib/chef/event_dispatch/dispatcher.rb:43:incall' 01:06:58 [2018-07-19T01:06:58-07:00] 警告:AptRepository 已经存在!弃用类覆盖来自说明书 apt 的自定义资源 apt_repository

01:06:58   executes both actions
01:06:58   installs a dpkg_package (FAILED - 1)
01:06:58   creates a file (FAILED - 2)
01:06:58   creates a file (FAILED - 3)
01:06:58   downloads the remote_file (FAILED - 4)
01:06:58 
01:06:58 Failures:
01:06:58 
01:06:58   1) vernemq::default installs a dpkg_package
01:06:58      Failure/Error: expect(chef_run).to install_dpkg_package('vernemq')
01:06:58 
01:06:58        expected "dpkg_package[vernemq]" with action :install to be in Chef run. Other dpkg_package resources:
01:06:58 
01:06:58          dpkg_package[vernemq_1.4.0-1_amd64.deb]
01:06:58         
01:06:58      # ./test/unit/recipes/default_spec.rb:18:in `block (2 levels) in <top (required)>'
01:06:58 
01:06:58   2) tm_vernemq::default creates a file
01:06:58      Failure/Error: expect(chef_run).to create_directory('/etc/vernemq/vmq.passwd')
01:06:58 
01:06:58        expected "directory[/etc/vernemq/vmq.passwd]" with action :create to be in Chef run. Other directory resources:
01:06:58 

【问题讨论】:

  • 请包含完整的错误信息,而不仅仅是第一行。
  • 添加了詹金斯错误
  • 所有错误都是正确的。您有我在下面提到的名称不匹配,并且正在为您的配置文件使用create_directory(它们不是目录资源)。

标签: unit-testing chef-infra chefspec


【解决方案1】:

您没有包含完整的错误消息,所以这主要是猜测,但您有 dpkg_package 'vernemq_1.4.0-1_amd64.deb' do 与 install_dpkg_package('vernemq')。这些名称需要在其中具有相同的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多