Rails 4のヘルパーテストからコントローラーヘルパーメソッドにアクセスするにはどうすればよいですか?

ニック・シアーズ

ApplicationControllerでヘルパーメソッドとして定義されたメソッドがあります。

helper_method :can_access_participant_contact_data?

ヘルパーファイルにあるヘルパーメソッドのテストを作成しようとしています。このヘルパーメソッドはを呼び出しますhelper_method :can_access_participant_contact_data?

# In participants_helper.rb
#
def redacted_contact_data participant, attribute_name
  attribute = participant.try(:contact_data).try(attribute_name)
  return attribute if can_access_participant_contact_data?(participant)
  return nil       if attribute.blank?
  return attribute.gsub(/\S/i, '*') # Asterisked string
end

これまでのテストで行っているのは、redacted_contact_dataを呼び出すことだけです。

require 'test_helper'

class ParticipantsHelperTest < ActionView::TestCase

   test "should return an asterisked string with spaces" do
     redacted_contact_data(Participant.first, :name)
   end

end

テストを実行すると、このメッセージが表示されます

undefined method `can_access_participant_contact_data?' for #<ParticipantsHelperTest:0x007fd6c7c6d608>

私は周りを見回してきましたが、この問題を回避する方法がわかりません。can_access_participant_contact_data?どういうわけかモックする必要がありますか?または、メソッドをテストに含めることはできますか?

Jay-Ar Polidario

AFAIK(私の知る限り)では、スタブするか、コードに変更を加えることなくこれを修正することはできません。基本的に、ヘルパーファイルはそれ自体のモジュールであり、含まれる場所に関係なく処理する必要があるためです。たとえば、モデルファイル内にそのようなヘルパーファイルを含めることをお勧めします。ちなみに、モデルファイルにも名前can_access_participant_contact_data?付けられてApplicationControllerますが定義されているメソッドとは異なります。したがって、コンテキスト/ベースを指定せずにこれを単体テストすることはできません。 。

考えられる回避策:

  • スタブ:

    • Mochaを使用するか、テストをRSpecに作り直します
    • または手動で(おそらくより良い方法があります):

      test "should return an asterisked string with spaces" do
        ParticipantsHelper.class_eval do
          define_method :can_access_participant_contact_data? do |arg|
            true
          end
        end
      
        redacted_contact_data(Participant.first, :name)
      end
      
  • または、すべてのApplicationControllerヘルパーメソッドを別の/既存のヘルパーファイルに移動しますApplicationHelperたとえば、既存のヘルパーファイル内に移動しますその後、メソッド/ sieを使用しているテストしている他のヘルパーファイル内にそのヘルパーを含めます。

    # helpers/application_helper.rb
    module ApplicationHelper
      def can_access_participant_contact_data?(participant)
        # YOUR CODE
      end
    end
    
    # helpers/participants_helper.rb
    module ParticipantHelper
      include ApplicationHelper
    
      def redacted_contact_data participant, attribute_name
        attribute = participant.try(:contact_data).try(attribute_name)
        return attribute if can_access_participant_contact_data?(participant)
        return nil       if attribute.blank?
        return attribute.gsub(/\S/i, '*') # Asterisked string
      end
    end
    
    • このアプローチを使用する場合、コントローラー内でヘルパーメソッドを呼び出す2つの方法:

      • helpersコントローラ内でRailsメソッドを使用します

        class ParticipantsController
          def show
            helpers.can_access_participant_contact_data?(@participant)
          end
        end
        
      • または、ヘルパーを直接含めます(私は個人的に上記の他のアプローチを好みます)

        class ApplicationController < ActionController::Base
          include ApplicationHelper
        end
        
        class ParticipantsController < ApplicationController
          def show
            can_access_participant_contact_data?(@participant)
          end
        end
        
    • ビューファイルの場合、コードを更新する必要はありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

メインアプリでRailsのマウント可能なエンジンヘルパーメソッドにアクセスするにはどうすればよいですか?

分類Dev

Ruby on Railsのコンソールからコントローラー/ビューヘルパーメソッドを呼び出すにはどうすればよいですか?

分類Dev

Railsのラベルヘルパーからデフォルトのテキストを削除するにはどうすればよいですか?

分類Dev

Railsで統合テストのヘルパーを作成するにはどうすればよいですか?

分類Dev

Railsコントローラーのコールバックにパラメーターを渡すにはどうすればよいですか?

分類Dev

minitestを使用してRailsでコントローラーの更新メソッドをテストするにはどうすればよいですか?

分類Dev

ビューでRailsヘルパーメソッドにアクセスするにはどうすればよいですか?「場所が指定されていません。URIを作成できません」

分類Dev

Rails 4:この長いコントローラーメソッドでロジックを分離するにはどうすればよいですか?

分類Dev

RSpecでRailsヘルパーメソッドをテストするときにparamsハッシュに値を設定するにはどうすればよいですか?

分類Dev

Rails統合テストでヘルパーメソッドを利用できるようにする方法は?

分類Dev

Railsでgulpベースのアセットパイプラインを使用してnpm / bowerからアセットをロードするにはどうすればよいですか?(スプロケットをはぎ取った)

分類Dev

ヘルパーのRailsフォームブロック-「偽造から保護する」を含めるにはどうすればよいですか?

分類Dev

Ruby on Railsモデルからphpcodeigniterコントローラーにパラメーター(ID、ユーザー名、パスワードなど)を渡すにはどうすればよいですか?

分類Dev

Ruby On Rails CLIで、ヘルパーパスを一覧表示するにはどうすればよいですか?

分類Dev

Rails:ルートからコントローラーとヘルパーにグローバル変数を渡すにはどうすればよいですか?

分類Dev

RailsコントローラーのアクションがRSpecで適切なメソッドを呼び出すことをテストするにはどうすればよいですか?

分類Dev

RailsでカスタムURLヘルパーを作成するにはどうすればよいですか?

分類Dev

セッションを使用するRails5コントローラーのテストを作成するにはどうすればよいですか?

分類Dev

Rails 4アプリのブートストラップ3にrespond.jsをインストールするにはどうすればよいですか?

分類Dev

Railsで、Jqueryからコントローラーメソッドにパラメーターを渡してから戻り値を取得するにはどうすればよいですか?

分類Dev

Rails:ヘルパーメソッドをテストからtest_helper.rbに移動する

分類Dev

RailsコントローラーアクションのRSpecテストでクエリ文字列を指定するにはどうすればよいですか?

分類Dev

RailsのjsonAPIからパラメーターにアクセスするにはどうすればよいですか?

分類Dev

Railsジョブ内のRailsヘルパーメソッドcurrent_userにアクセスする方法は?

分類Dev

Rails 4のコントローラーからパブリックディレクトリをダウンロードするにはどうすればよいですか?

分類Dev

リソースの一部のアクションが1つのコントローラーに移動し、一部が別のコントローラーに移動するようにRailsルートを適切に定義するにはどうすればよいですか?

分類Dev

コンソールでRailsセッションにアクセスするにはどうすればよいですか?

分類Dev

Railsルーターにコンテンツから動的にコントローラーを選択させるにはどうすればよいですか?

分類Dev

Rails 4-親リソースから独立したすべてのアイテムを一覧表示するために、ネストされたリソースのインデックスルートを追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    メインアプリでRailsのマウント可能なエンジンヘルパーメソッドにアクセスするにはどうすればよいですか?

  2. 2

    Ruby on Railsのコンソールからコントローラー/ビューヘルパーメソッドを呼び出すにはどうすればよいですか?

  3. 3

    Railsのラベルヘルパーからデフォルトのテキストを削除するにはどうすればよいですか?

  4. 4

    Railsで統合テストのヘルパーを作成するにはどうすればよいですか?

  5. 5

    Railsコントローラーのコールバックにパラメーターを渡すにはどうすればよいですか?

  6. 6

    minitestを使用してRailsでコントローラーの更新メソッドをテストするにはどうすればよいですか?

  7. 7

    ビューでRailsヘルパーメソッドにアクセスするにはどうすればよいですか?「場所が指定されていません。URIを作成できません」

  8. 8

    Rails 4:この長いコントローラーメソッドでロジックを分離するにはどうすればよいですか?

  9. 9

    RSpecでRailsヘルパーメソッドをテストするときにparamsハッシュに値を設定するにはどうすればよいですか?

  10. 10

    Rails統合テストでヘルパーメソッドを利用できるようにする方法は?

  11. 11

    Railsでgulpベースのアセットパイプラインを使用してnpm / bowerからアセットをロードするにはどうすればよいですか?(スプロケットをはぎ取った)

  12. 12

    ヘルパーのRailsフォームブロック-「偽造から保護する」を含めるにはどうすればよいですか?

  13. 13

    Ruby on Railsモデルからphpcodeigniterコントローラーにパラメーター(ID、ユーザー名、パスワードなど)を渡すにはどうすればよいですか?

  14. 14

    Ruby On Rails CLIで、ヘルパーパスを一覧表示するにはどうすればよいですか?

  15. 15

    Rails:ルートからコントローラーとヘルパーにグローバル変数を渡すにはどうすればよいですか?

  16. 16

    RailsコントローラーのアクションがRSpecで適切なメソッドを呼び出すことをテストするにはどうすればよいですか?

  17. 17

    RailsでカスタムURLヘルパーを作成するにはどうすればよいですか?

  18. 18

    セッションを使用するRails5コントローラーのテストを作成するにはどうすればよいですか?

  19. 19

    Rails 4アプリのブートストラップ3にrespond.jsをインストールするにはどうすればよいですか?

  20. 20

    Railsで、Jqueryからコントローラーメソッドにパラメーターを渡してから戻り値を取得するにはどうすればよいですか?

  21. 21

    Rails:ヘルパーメソッドをテストからtest_helper.rbに移動する

  22. 22

    RailsコントローラーアクションのRSpecテストでクエリ文字列を指定するにはどうすればよいですか?

  23. 23

    RailsのjsonAPIからパラメーターにアクセスするにはどうすればよいですか?

  24. 24

    Railsジョブ内のRailsヘルパーメソッドcurrent_userにアクセスする方法は?

  25. 25

    Rails 4のコントローラーからパブリックディレクトリをダウンロードするにはどうすればよいですか?

  26. 26

    リソースの一部のアクションが1つのコントローラーに移動し、一部が別のコントローラーに移動するようにRailsルートを適切に定義するにはどうすればよいですか?

  27. 27

    コンソールでRailsセッションにアクセスするにはどうすればよいですか?

  28. 28

    Railsルーターにコンテンツから動的にコントローラーを選択させるにはどうすればよいですか?

  29. 29

    Rails 4-親リソースから独立したすべてのアイテムを一覧表示するために、ネストされたリソースのインデックスルートを追加するにはどうすればよいですか?

ホットタグ

アーカイブ