【问题标题】:Modify Rake Task at test/runtime在测试/运行时修改 Rake 任务
【发布时间】:2018-02-11 17:42:01
【问题描述】:

考虑以下

class Foo
  def bar
    1
  end
end

然后是两个 rake 任务 ...

task :something
  InvokeSomething(Foo.new)
end

task :test
  do_some_testing
end

def do_some_testing
   setup_test
   `rake something`
   check_if_it_did_everything_correctly
end

执行setup_test后,我想将class Foo的源代码修改为return 2方法bar

想法:

  • 创建一个 rake 任务,在我定义 rake 任务 something 之前调用它并直接修改源代码。这样something 是用不同的源代码定义的。

  • 以某种方式修改 Rake 任务,以便覆盖该特定方法。至少我需要在运行时引用 rake 任务。

【问题讨论】:

  • 这个轮子是多年前发明的:你应该mock原来的方法返回2
  • @mudasobwa 注意到我调用了 rake 任务,方法是对其进行脱壳。我没有参考它。在完全重新设计测试之前,我无法模拟。

标签: ruby rspec rake


【解决方案1】:

有多种方法可以做到这一点。

您可以在do_some_testing 期间从Rake::Task["something"] 获取引用并在那里重新定义一个方法。

但还有另一种更简单的方法 - 对我有用。将bar 中的值设置为环境变量。并在需要时修改环境变量。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 2011-10-17
    • 1970-01-01
    • 2011-06-07
    • 2010-11-18
    • 2012-05-30
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多