1

我正在编写一本带有自定义资源的食谱,该资源(除其他外)通过ssh-keygen. 我需要测试用户输入无效输入和资源应该引发异常的场景,所以我正在寻找一种方法来验证“给定以下输入......厨师运行失败”。

如果我正确理解所有内容,Test Kitchen 意味着每次收敛都会成功,而 ChefSpec 意味着资源永远不会真正执行(因此我的 ssh-keygen 调用将永远不会被调用)。

是否有任何常规方法来测试这种情况?

4

1 回答 1

1

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

要对失败进行适当的测试,您应该expect(:chef_run).to raise_error按照文档中的描述

文档的引用step_into

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

需要“厨师规格”

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,强烈建议您还创建一个 library/matchers.rb 文件,如下面的“打包自定义匹配器”部分所述。除非您正在测试它,否则您永远不应该步入 LWRP。永远不要从另一本食谱中步入 LWRP!

于 2017-06-23T07:45:56.307 回答