我正在编写一本带有自定义资源的食谱,该资源(除其他外)通过ssh-keygen
. 我需要测试用户输入无效输入和资源应该引发异常的场景,所以我正在寻找一种方法来验证“给定以下输入......厨师运行失败”。
如果我正确理解所有内容,Test Kitchen 意味着每次收敛都会成功,而 ChefSpec 意味着资源永远不会真正执行(因此我的 ssh-keygen 调用将永远不会被调用)。
是否有任何常规方法来测试这种情况?
我正在编写一本带有自定义资源的食谱,该资源(除其他外)通过ssh-keygen
. 我需要测试用户输入无效输入和资源应该引发异常的场景,所以我正在寻找一种方法来验证“给定以下输入......厨师运行失败”。
如果我正确理解所有内容,Test Kitchen 意味着每次收敛都会成功,而 ChefSpec 意味着资源永远不会真正执行(因此我的 ssh-keygen 调用将永远不会被调用)。
是否有任何常规方法来测试这种情况?
要测试 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!