2017-01-27 4 views
2

私は機能をテストしており、ApplicationControllerからメソッドを呼び出す必要があります。メソッド内でメソッドgta_dataを呼び出す方法はありますか?私は機能をテストしており、ApplicationControllerからメソッドを呼び出す必要がありますが、どうすればいいですか?

def gtm_data(data_hash = nil) 
    @gtm_data ||= {} 
    if @dynamic_page 
    gaPageUid = 'category-' + @dynamic_page.uid 
    else 
    gaPageUid = 'other' 
    end 

    @gtm_data = { 
    gaLocale: @locale, gaLanguage: @lang, 
    gaRegion: current_site.region, gaPageUid: gaPageUid 
    } 
    @gtm_data 
end 

スペック/機能/ application_page.rb

describe 'Application Page' do 
    before :each do 
    @application_page = FactoryGirl.create(:application_page, meta_title: 'catched!') 
    end 
    describe 'gaming layout' do 
    before :each do 
     @product = Presenters::Product.new(FactoryGirl.create(:product)) 
     @page_url = "http://de-de.test.de/application_pages/#{@application_page.id}" 
    end 
    it 'ignores the serie version if have not sufficient data' do 
     visit @page_url 
     expect(page).to have_content @product.name 
    end 
    end 
end 

答えて

0

アプリケーションの他のコントローラの仕様からコントローラとhelper_methodとして宣言され、あなたのメソッドからメソッドを呼び出したい場合、それはあなたのコントローラから見えるようにしなければなりません。あなたのメソッドがプライベートである場合は、controller.method_nameまたはcontroller.send(:method_name)を使用することができます。

しかし、ApplicationControllerでメソッドをテストし、ApplicationController自体をテストする場合は、anonymous controller rspecアプローチを使用する必要があります。

そして。私があなたを理解していれば、あなたの機能仕様でコントローラメソッドを呼びたいと思っています。あなたにそれをするはずがないことを伝える必要があります。あなたのフィーチャーの仕様では、Webページでユーザーのアクションをシミュレートし、Webページに表示される最終結果を期待します。それはちょうどボタンを

ユーザーがクリックするようなものだと私は理解して、「新 ページ」ヘッダ

+0

のページにリダイレクトするが、1つの問題があります。 'expect(page).to have_content @ product.name'の確認 私はテストに失敗しました。私は 'gtm_data'メソッドのためにそれを発見しました。 –

+0

この場合、 'gtm_data'があなたのテストにどのように影響するのかを知りたがっています。そして、あなたのユースケースでこの論理が正しいかどうかを調べます。もしそうなら、テストは実際に失敗するはずです。そうでない場合は、ロジックを変更する必要があります。 コアポイントはまだあります。フィーチャの仕様では、ユーザーの行動やアプリの反応をテストする必要があります。 – VAD

関連する問題