如何在 ServerSpec 测试之前设置测试先决条件?

How to setup test preconditions before a ServerSpec test?

我正在编写一本简单的说明书,用于将 SSL 代理部署到服务器上。这本 cookbook 最终会被其他部署 web 服务的 cookbook 使用,以便在它们前面设置 SSL 代理,但是为了测试代理 cookbook 本身,它背后没有这样的服务。我对这本食谱的基本测试策略如下:

  1. 将盒子与测试厨房收敛
  2. 将 ServerSpec(或可能是 Bats)与测试厨房一起使用
    1. 通过在代理被配置为转发到的端口上列出的框中启动一个 python SimpleHTTPServer 来设置测试,并在 index.html 文件中创建它来服务。
    2. 断言,当我点击 https://localhost 时,我得到了 SimpleHTTPServer 正在提供的文件。
    3. 再声明一些关于代理的东西(所有这些都需要它背后有一个服务。)
  3. 拆解。真的不用拆,让test-kitchen把盒子拆了就可以了。

所以我的问题是,使用 test-kitchen 和 ServerSpec and/or bats 设置这类测试先决条件的正确方法是什么?

如果设置和拆卸确实不是我正在测试的部分,那么我通常只是在 Ruby 某个地方执行它们,在每次测试之前运行(通常在 spec_helper.rb 中) .由于 serverspec 只是字面意思 运行 ruby 在测试厨房实例上逐行代码,我觉得没有必要在 serverspec 中提供提供 setup/teardown 功能的东西(在其他换言之,没有需要调用设置或拆卸方法的排序问题或重复测试)。

老问题,但为了完整性:
您可以在 serverspec.

中使用 rspec 的 before
describe file('/tmp/testfile') do
  before do
    File.write('/tmp/testfile', 'Hello, world')
  end
  it { should exist }
  its(:content) { should include('Hello') }
end

https://github.com/jantman/serverspec-extended-types 中的 http_get 类型可能会提供在 serverspec.

中进行 HTTP 服务器测试所需的内容