测试厨师食谱失败

时间:2017-06-20 11:49:41

标签: chef test-kitchen chefspec

我正在编写一本带有自定义资源的食谱,其中包括({其他)通过ssh-keygen验证SSH密钥。我需要测试用户输入无效输入和资源的情况应该根据例外情况进行测试,因此我正在寻找一种方法来验证是否给出了以下输入...厨师运行失败'。

如果我理解正确,Test Kitchen意味着每个聚合都会成功结束,而ChefSpec意味着资源永远不会真正执行(所以我的ssh-keygen调用永远不会被调用)。

有没有传统方法来测试这种情况?

1 个答案:

答案 0 :(得分:1)

要测试custom_resource的内部位,您必须告诉ChefSpec step_into它。你是对的ChefSpec在正常情况下不会执行提供程序。

要对失败进行正确测试,您应该expect(:chef_run).to raise_error描述here in the documentation

step_into的文档引用:

  

为了运行LWRP公开的操作,您必须这样做   明确告诉Runner进入它:

     

要求'chefspec'

describe 'foo::default' do
  let(:chef_run) do
    ChefSpec::SoloRunner.new(step_into: ['my_lwrp']).converge('foo::default')
  end

  it 'installs the foo package through my_lwrp' do
    expect(chef_run).to install_package('foo')
  end
end
     

注意:如果您的食谱暴露了LWRP,强烈建议您使用   还创建了一个库/ matchers.rb文件,如下所述   “包装自定义匹配器”部分。 你永远不应该踩到一个   LWRP除非您正在测试它。永远不要从另一个进入LWRP   食谱!