11

私のレールアプリケーションでは、ファイルsample_data.rb/lib/tasksの中にあり、/specディレクトリにテストファイルがたくさんあります。Ruby on Railsでrakeタスクやテストファイルのヘルパー関数をどこに置くのですか?

私はこれらのヘルパー関数を置くべき
def random_address 
    [Faker::Address.street_address, Faker::Address.city].join("\n") 
end 

すべてのこれらのファイルは、多くの場合のような共通の機能を共有しますか?これには何らかの種類の大会がありますか?

ありがとうございました!

答えて

8

静的関数を使用して静的クラスを作成できます。 、そして、

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クラスの依存関係。

+0

ありがとうございました!あなたはそのクラスをどのディレクトリに入れますか? – Tintin81

+0

それはあなた次第です。私はおそらくそれをコントローラのディレクトリに入れます。 – BlackHatSamurai

+14

Noooooコントローラディレクトリです。これはまさに 'lib'フォルダがある理由です。 'app/controllers'フォルダにはコントローラだけが含まれていなければなりません。 – nathanvda

6

レーキ専用のレーキであることがわかっている場合は、RAILS_ROOT/Rakefileに直接追加することもできます(使用している例はそうではないでしょう)。

私は熊手のinvoke構文を簡素化するためにこれを使用します。

#!/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 

そのように、私はすくいタスクの代わりに、Rake::Task[ "my_namespace:my_task" ].invokeinvoke "my_namespace:my_task"を使用することができます。

+0

まさに私がここで終わった理由! 'Rake :: Task ['namespace:task']のラッパーをどこに置くべきかを知りたい。 Rake :: Task ['namespace:task']。invoke'。 – jibiel

0

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

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

    module_function 
end 

とあなたのrakeタスクの内部を含むlib/fake_data.rbよう

何かがちょうどモジュールを必要とし、FakeData.random_addressを呼び出します。

しかし、それがあなたがテストを実行するたびに行う必要があるシードのようなものなら、これを一般的なbefore allに追加することを検討する必要があります。

など。私spec_helperは次のようになります。

とモジュールSetupSupportspec/support/setup_support.rbで定義され、以下のようになりますされています

module SetupSupport 

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

end 

ないあなたが種をロードする必要がある場合は必ず、またはすでにこれをやっているが、必要な擬似データを生成するための理想的な場所です。

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

+0

あなたの 'FakeData'モジュールのサンプルコードを動作させるために、* after *ではなく' random_address'関数を定義する前に 'module_function'ステートメントを挿入する必要があります。 – wehal3001

関連する問題