2017-06-28 16 views
0

これは簡単な質問ですが、明確な答えが見つかりません。Rspec:機能仕様からApplicationControllerメソッドを実行する方法

RspecとCapybaraを使用してダミーアプリケーションからレールエンジンをテストしています。私の仕様では、特定の引数を持つメソッドget_component()を使用する必要があります。どうしたらいいですか?

私の機能テストがある:私は方法は、私はそれが本当のために実行したい/スタブをモックする必要はありません

NoMethodError: 
undefined method `get_component' for #<ApplicationController:0x007ff7207234f8> 

を返し

require "rails_helper" 

describe "My test", type: :feature do 
    it "gets a component if slug is provided" do 
     # ... 
     component = ApplicationController.get_component(slug) 
     # ... 
    end 
end 

また、アプリケーションApplicationControllerは、エンジン1を継承する必要がありますか? ApplicationControllerを呼び出すのは正しいですか?

+1

これについての情報を見つけることができない理由は、実際に機能テストで行うべきではないからです。機能テストは、ユーザーの視点からブラウザーを介して行う必要があります。 –

+0

私は知っていますが、ユーザーが達成したことが機能が期待していること、つまりフォームを完成した後に新しいコンポーネントを追加することであるかどうかを確認する必要がありました。これはまだやってはいけないことですか? –

+0

コンポーネントがアプリケーションのどこかでユーザーに表示されていると仮定すると、UIを直接作成するのではなくUIにコンポーネントが表示されているのを確認する必要があります。あなたが試みているのは、異なるタイプのテスト(リクエスト、コントローラなど)に適しています。 –

答えて

1

get_componentはクラスメソッドではなくインスタンスメソッドであるため、クラス自体ではなく、ApplicationControllerオブジェクトでのみ呼び出すことができます。代わりにこれを試してみてください...

+0

ありがとうSteve。それはアプリのメソッドのための権利です。私はエンジンメソッドを望んでいたので、私はエンジンクラスから呼び出す必要があることを知ったので、 'MyEngine :: ApplicationController.new.get_component(slug)'のようにします。私はアプリケーション 'ApplicationRecord'がエンジンクラスを継承していると思ったが、明らかにそうではない。 –

関連する問題