2017-01-27 2 views
2

Je teste les fonctionnalités et besoin d'appeler une méthode à partir de ApplicationController, Comment appeler une méthode gta_data dans le test?Je teste les fonctionnalités et ai besoin d'appeler une méthode depuis ApplicationController, comment puis-je faire cela?

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 

Spec/caractéristiques/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 

Répondre

0

Si vous voulez appeler la méthode de commande d'application de la spécification et votre méthode de tout autre contrôleur déclaré helper_method alors il doit être visible de votre contrôleur. Vous pouvez donc utiliser controller.method_name ou controller.send(:method_name) si votre méthode est privée. Mais si vous voulez tester votre méthode dans ApplicationController et tester ApplicationController elle-même, vous devez utiliser une approche rspec anonymous controller.

Et. Si je vous ai bien compris, vous voulez appeler la méthode du contrôleur dans les spécifications de votre fonctionnalité. Je dois vous dire qu'on n'est pas censé le faire. Dans les spécifications de votre fonctionnalité, vous simulez simplement les actions de l'utilisateur dans les pages Web et attendez le résultat final qui sera visible dans vos pages Web. Il est comme

utilisateurs clique sur le bouton, et redirige vers la page avec l'en-tête « Nouvelle page »

+0

Je comprends, mais il y a un problème. Vérification de 'expect (page) .to have_content @ product.name' J'ai un échec de test. J'ai découvert cela à cause de la méthode 'gtm_data'. –

+0

Dans ce cas, vous voulez savoir exactement comment 'gtm_data' affecte votre test. Et puis découvrez cette logique correcte dans votre cas d'utilisation ou non. Si c'est le cas, le test devrait échouer. Si non, vous devez changer votre logique. Le point clé est toujours: dans les spécifications des fonctionnalités, vous devez tester le comportement des utilisateurs et la manière dont votre application réagit. – VAD