Ruby 将对象作为主体传递给rspec

Ruby 将对象作为主体传递给rspec,ruby,rspec,Ruby,Rspec,我正在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}

我正在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
(完整代码可在中找到)

为了传递要测试的对象,我将其作为YAML转储到一个文件(当前为
/tmp/catalog
)中,并将其作为测试的主题加载:

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

有没有一种方法可以让我通过
目录
对象作为我的测试对象,而不将其转储到文件中?

我不太清楚您到底想实现什么,但根据我的理解,我觉得使用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
要求“rspec/预期”
阶级事务
def小部件
@小部件| |=[]
结束
结束
描述所做的事情
在…之前做
@新事物
结束
描述“在(:每个)之前初始化”do
它“有0个小部件”做什么
#@thing在这里可用
@thing.should应该有(0)个小部件
结束
它“可以接受新的小部件”吗

@thing.widgets我不太清楚您到底想要实现什么,但根据我的理解,我觉得使用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
要求“rspec/预期”
阶级事务
def小部件
@小部件| |=[]
结束
结束
描述所做的事情
在…之前做
@新事物
结束
描述“在(:每个)之前初始化”do
它“有0个小部件”做什么
#@thing在这里可用
@thing.should应该有(0)个小部件
结束
它“可以接受新的小部件”吗

@thing.widgets是否要跨规范文件使用目录对象?指向完整代码的链接不再有效。我想了解在将目录对象转储到文件之前如何创建目录对象是否要跨等级库文件使用目录对象?指向完整代码的链接不再有效。我想了解如何在将目录对象转储到文件之前创建它