代码之家  ›  专栏  ›  技术社区  ›  Michael Barton

我可以重写test_helper.rb中的环境来测试rake任务吗?

  •  10
  • Michael Barton  · 技术社区  · 17 年前

    我在rakefile中有一系列rake任务,我想作为我的规范等的一部分进行测试。每个任务的定义形式如下:

    task :do_somthing => :environment do
      # Do something with the database here
    end
    

    其中:environment任务设置ActiveRecord/DataMapper数据库连接和类。我没有将它作为Rails的一部分使用,但是我有一系列的测试,我喜欢作为BDD的一部分运行。

    这段代码演示了我如何测试rake任务。

    def setup
      @rake = Rake::Application.new
      Rake.application = @rake
      load File.dirname(__FILE__) + '/../../tasks/do_something.rake'
    end
    
    should "import data" do
      @rake["do_something"].invoke
      assert something_in_the_database
    end
    

    所以我的帮助请求——是否有可能在我的test-helper.rb文件中覆盖:environment任务,这样我的rake测试就可以和我的测试数据库交互,而不是与产品交互?我尝试在帮助程序文件中重新定义任务,但这不起作用。

    任何解决方案的帮助都是很好的,因为我在过去的一周里一直在做这个。

    3 回复  |  直到 14 年前
        1
  •  9
  •   Mike Woodhouse    14 年前

    我对类似问题的“解决方案”是从.rake文件中提取所有逻辑,并创建用于执行任务的类,在rake文件中只留下一个单行调用,这让我对不太难测试充满信心。然后,这些类就可以非常正常地进行测试了。

    我不知道这对维持某种深远状态的一组复杂的相互依赖的任务有多大的帮助:可能不太好,但再次说明,这很可能是其他设计问题的一个迹象…

    我很好奇我是否错过了更好的东西。

    编辑:曾经有一篇博客文章 here 这(a)说了同样的话,(b)说得更好。看起来他也是先说的。

        2
  •  1
  •   Mateusz Juraszek    16 年前

    我想你在找这条线: 要求(file.join(rails_root,'config,'environment')) 这正是您在“任务:环境”实现中发现的内容

    我用它来测试我的rake任务使用rspec

        3
  •  0
  •   Subba Rao    17 年前

    当您运行测试时,正在加载的环境是test。

    所以你在和测试互动 仅数据库。

    所以我看不到任何理由在test_helper.rb中覆盖您的rake任务。

    推荐文章