保留rake任务后RSpec rake任务期间生成的值

时间:2016-06-23 17:21:49

标签: ruby rspec rake

我有一个如下课程:

class Foo
  @variable = {}

  class << self
    attr_accessor :variable
  end

  def self.run(file)
    # do stuff
  end
end

我有一个RSpec类型的方法,如下所示:

def method?
  Foo.variable[@name] = {}
  Foo.variable[@name][:variable_two] = 'string'

  true
end

我有一个类似以下的rspec和自定义任务:

RSpec::Core::RakeTask.new("rspec-#{spec}".to_sym) do |task|
  task.pattern = spec
end

desc "do stuff"
task spec do
  Rake::Task["rspec-#{spec}".to_sym].invoke
  Foo.run(spec)
end

我正在用rake执行spec任务。

如果我在puts Foo.variable定义中method?,那么我看到在"rspec-#{spec}".to_sym的RSpec子任务期间,Foo.variable哈希的填充完全正如我预期的那样。但是,只要Foo.run在rspec rake任务之后执行,Foo.variable哈希变为空。我已经尝试了许多不同的方法来将rspec rake任务期间生成的值传递或保留到Foo.run方法,上面的代码基本上是我在每次尝试后返回的模板。

对于之后执行的另一个方法,在rspec rake任务期间,什么样的算法为我提供了保留赋给变量的值的功能?

尝试使用以下类变量建议:

class Foo
  @@variable = {}

  def self.variable
    @@variable
  end

  def self.run(file)
    # do stuff
  end
end

同样的问题。

1 个答案:

答案 0 :(得分:1)

我认为你可能正在寻找一个类变量。

的内容
class Foo
  @@bar = 0

  def increment
    @@bar += 1
  end

  def bar
    @@bar
  end
end

f = Foo.new
f.bar
=> 0

f.increment
f.bar
=> 1

g = Foo.new
g.bar
=> 1

g.increment
g.bar
=> 2

f.bar
=> 2

用双@(在本例中为@@bar)表示的类变量通常被视为bad practice,因此使用时请务必小心。