2017-04-13 1 views
0

Je travaille dans un cadre de concombre-rubis et nous utilisons Capybara et SitePrism pour conduire le navigateur.Est-il possible d'utiliser des "étapes" dans les pages de SitePrism?

J'ai une situation où je veux réessayer un tas d'étapes si une erreur se produit, alors je mettais une méthode avec la logique pour couvrir ce dans une page SitePrism comme suit:

steps %Q{ 
When I click on the back button 
And I enter my reference number 
Then I am able to complete the action successfully 
} 

Le problème Je constate que lorsque cette partie du code est atteinte, l'exécution échoue avec:

undefined method `steps' for #<MySitePrismPage:0x000000063be5b0 @loaded=false> (NoMethodError) 

Toute idée s'il y a un moyen pour moi d'utiliser les étapes dans les pages SitePrism?

Merci!

+0

Je pensais qu'il était un problème avec des pages SitePrism, mais je J'ai juste essayé avec une classe standard ou même un module et je continue d'avoir le même problème à propos des 'étapes de méthodes non définies'. Si quelqu'un a une suggestion que je pourrais essayer pls? – mickael

Répondre

0

Crédit pour 'Jonas Maturana Larsen' dans un google group. Problème similaire avec un exemple différent, mais en passant le 'monde' à la classe, le problème a également été résolu pour moi.

l'étape est définie dans le module RbWorld des concombres.

Vous devez passer dans l'instance mondiale à partir de laquelle vous créez la classe TestRubyCallStep.

Dans votre cas, vous pouvez réellement vouloir faire un module au lieu d'un classe si vous avez juste besoin d'un endroit pour garder les méthodes partagées.

class TestRubyCallStep 
    include Calabash::Android::Operations 

    def initialize(world) 
     @world = world 
    end 

    def callMethod 
     @world.step %Q{my customized steps in custom_step.rb} 
    end 
end  

Le contexte dans lequel la définition de l'étape est exécutée est le monde :)

Essayez ceci:

Then /^I call a step from Ruby class "([^\"]*)"$/ do |world| 
    testObj = TestRubyCallStep.new(self) 
    testObj.callMethod 
end