RAILS:加载所有全局装置后运行一次代码

发布于 2024-10-27 10:21:28 字数 122 浏览 3 评论 0原文

我在哪里可以编写代码,使其在加载所有全局固定装置之后,以及在运行

我之前在 Rails 2.3.11 上使用 rspec 1.3.1 尝试过的任何测试/规范之前(:suite)执行一次,并且似乎在固定装置之前执行。

Where can I write code to be executed only once after loading of all global fixtures, and before running any tests/specs

I tried before(:suite) with rspec 1.3.1 on Rails 2.3.11 and that seems to get executed before fixtures.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

稀香 2024-11-03 10:21:28

rake 任务(/lib/tasks) 怎么样?例如,我有一个(reset_db.rake)可以加载固定装置,重置数据库等等:

namespace :db do
  desc "Drop, create, migrate, seed the database and prepare the test database for rspec"
  task :reset_db => :environment do
    Rake::Task['db:drop'].invoke
    Rake::Task['db:create'].invoke
    Rake::Task['db:migrate'].invoke
    Rake::Task['db:fixtures:load'].invoke
    Rake::Task['db:test:prepare'].invoke
  end
end

How about a rake task(/lib/tasks) ? For instance, i have one(reset_db.rake) that loads fixtures, resets db and more :

namespace :db do
  desc "Drop, create, migrate, seed the database and prepare the test database for rspec"
  task :reset_db => :environment do
    Rake::Task['db:drop'].invoke
    Rake::Task['db:create'].invoke
    Rake::Task['db:migrate'].invoke
    Rake::Task['db:fixtures:load'].invoke
    Rake::Task['db:test:prepare'].invoke
  end
end
此生挚爱伱 2024-11-03 10:21:28

我遇到了同样的问题,但仍然没有找到任何方法在加载固定装置后连接一些代码......所以我使用了 SpyrosP 解决方案。然而,这种做法的问题是,您无法再从固定装置访问器助手中受益,因为您不是从 rspec 配置而是从 rake 任务加载固定装置。

所以基本上你需要像这样重新创建这些助手(代码有点脏,但似乎对我有用:

  #spec_helper.rb 

  module CustomAccessors
    # Remplacement de fixtures :all
    %w{yml csv}.each do |format|
      paths =  Dir.
        glob(::Rails.root.join("spec/fixtures/*.#{format}")).
        map! { |path| path.match(/\/([^\.\/]*)\./)[1] }

      paths.each do |path|
        define_method path do |*args|
          path.singularize.camelcase.constantize.find(ActiveRecord::Fixtures.identify(args[0]))
        end
      end
    end
  end

  RSpec.configure do |config|
    #config.fixture_path = "#{::Rails.root}/spec/fixtures"
    config.use_transactional_fixtures = true
    config.include(CustomAccessors)
  end

I run into the same issue, but still haven't found any way to hook up some code after loading fixtures ... so i used the SpyrosP solution. However the problem with this way of doing is that you can't benefit anymore of the fixtures accessors helpers, since you don't load your fixtures from the rspec config but from a rake task.

So basically you neeed to recreate theese helpers like that (code is a bit dirty but seems to work for me :

  #spec_helper.rb 

  module CustomAccessors
    # Remplacement de fixtures :all
    %w{yml csv}.each do |format|
      paths =  Dir.
        glob(::Rails.root.join("spec/fixtures/*.#{format}")).
        map! { |path| path.match(/\/([^\.\/]*)\./)[1] }

      paths.each do |path|
        define_method path do |*args|
          path.singularize.camelcase.constantize.find(ActiveRecord::Fixtures.identify(args[0]))
        end
      end
    end
  end

  RSpec.configure do |config|
    #config.fixture_path = "#{::Rails.root}/spec/fixtures"
    config.use_transactional_fixtures = true
    config.include(CustomAccessors)
  end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文