12

私のRailsアプリケーションでは、ディレクトリsample_data.rb/lib/tasksにファイルとテストファイルがたくさんあります/spec

これらのファイルはすべて、多くの場合、次のような共通の機能を共有しています。

def random_address
  [Faker::Address.street_address, Faker::Address.city].join("\n")
end

これらのヘルパー関数はどこに配置すればよいですか? これにはある種の慣習がありますか?

助けてくれてありがとう!

4

3 に答える 3

10

静的関数を使用して静的クラスを作成できます。それは次のようになります。

class HelperFunctions

     def self.random_address
          [Faker::Address.street_address, Faker::Address.city].join("\n")
     end

     def self.otherFunction
     end
end

次に、行う必要があるのは次のとおりです。

  1. 使用するファイルにヘルパー クラスを含めます
  2. 次のように実行します。

    HelperFunctions::random_address(anyParametersYouMightHave)
    

これを行うときは、HelperFunctionsクラスに依存関係が含まれていることを確認してください。

于 2013-03-01T21:43:42.013 に答える
7

レーキのみに固有のものであると確信している場合は、直接追加することもできRAILS_ROOT/Rakefileます (使用する例ではおそらくそうではありません)。

これを使用して、rake の呼び出し構文を簡素化します。

#!/usr/bin/env rake
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

require File.expand_path('../config/application', __FILE__)

def invoke( task_name )
  Rake::Task[ task_name ].invoke
end

MyApp::Application.load_tasks

そうすれば、invoke "my_namespace:my_task"の代わりに in rake タスクを使用できますRake::Task[ "my_namespace:my_task" ].invoke

于 2013-05-28T14:23:24.387 に答える
1

モジュールでメソッドを共有し、そのようなモジュールをlibフォルダー内に配置します。

lib/fake_data.rb入っているようなもの

module FakeData
  def random_address
    [Faker::Address.street_address, Faker::Address.city].join("\n")
  end

  module_function 
end

rake タスク内では、モジュールを必要として、 を呼び出すだけですFakeData.random_address

ただし、テストを実行するたびに実行する必要があるシードのようなものである場合は、これを general に追加することを検討する必要がありますbefore all

たとえば、私のspec_helper見た目は次のようになります。

# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

RSpec.configure do |config|
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"

  include SetupSupport

  config.before(:all) do
    load_db_seed
  end
end

モジュールSetupSupportは で定義されspec/support/setup_support.rb、次のようになります。

module SetupSupport

  def load_db_seed
    load(File.join(Rails.root, 'db', 'seeds.rb'))
  end

end

シードをロードする必要があるのか​​、すでにロードしているのかはわかりませんが、必要な偽のデータを生成するのにも理想的な場所です。

コードは私の仕様にのみ関連しているため、私のセットアップ サポート クラスは で定義されていることに注意してくださいspec/support。同じコードを必要とする rake タスクはありません。

于 2013-11-25T10:13:28.000 に答える