1

catalog以下を使用して、Ruby アプリ内からオブジェクトに対してrspec テストを実行していRspec::Core::Runner::runます。

File.open('/tmp/catalog', 'w') do |out|
  YAML.dump(catalog, out)
end

...

unless RSpec::Core::Runner::run(spec_dirs, $stderr, out) == 0
  raise Puppet::Error, "Unit tests failed:\n#{out.string}"
end

(完全なコードはhttps://github.com/camptocamp/puppet-spec/blob/master/lib/puppet/indirector/catalog/rest_spec.rbにあります)

テストしたいオブジェクトを渡すために、YAML としてファイル (現在は/tmp/catalog) にダンプし、テストでサブジェクトとしてロードします。

describe 'notrun' do
  subject { YAML.load_file('/tmp/catalog') }
  it { should contain_package('ppet') }
end

catalogファイルにダンプせずに、オブジェクトをテストの対象として渡す方法はありますか?

4

1 に答える 1

1

あなたが何を達成しようとしているのか正確にはわかりませんが、私の理解では、 before(:each) フックを使用すると役立つ可能性があると思います。このブロックでは、そのスコープ内のすべてのストーリーで使用できる変数を定義できます。

以下に例を示します。

require "rspec/expectations"

class Thing
  def widgets
    @widgets ||= []
  end
end

describe Thing do
  before(:each) do
    @thing = Thing.new
  end

  describe "initialized in before(:each)" do
    it "has 0 widgets" do
      # @thing is available here
      @thing.should have(0).widgets
    end

    it "can get accept new widgets" do
      @thing.widgets << Object.new
    end

    it "does not share state across examples" do
      @thing.should have(0).widgets
    end
  end
end

詳細については、 https ://www.relishapp.com/rspec/rspec-core/v/2-2/docs/hooks/before-and-after-hooks#define-before (:each)-block を ご覧ください。

于 2013-04-03T12:43:13.637 に答える