2017-01-17 1 views
1

J'ai la structure suivante du dossier:Est-il possible de savoir à partir de quel dossier le scénario concombre est en cours d'exécution?

-features 
    -admin 
    -desktop 
    -mobile 
-step definitions 
-support 

Je veux savoir de quel dossier scénario actuel est en cours d'exécution maintenant (admin/bureau/mobile). Est-ce possible? Parce que je veux ajouter une condition dans crochets fichier pour exécuter les conditions nécessaires de différents dossiers.

+0

Quel est le problème avec le bon vieux bon '__FILE__'? – mudasobwa

+0

Il ne met que le nom du fichier hooks. Et j'ai besoin de détecter à partir de quel dossier le scénario a été exécuté. Parce que je veux le détecter dans le fichier hooks dans la méthode Before. Est-il possible de faire comme ça? –

Répondre

2

Vous pouvez accéder à des détails sur l'emplacement du fichier de fonction en utilisant la méthode Scenario#location, qui retourne un Cucumber::Core::Ast::Location::Precise. A partir de ce que vous pouvez accéder au chemin du fichier de la fonction à l'aide #file:

scenario.location.file 
#=> "features/mobile/test.feature" 

Par exemple, le crochet pourrait ressembler à:

Before do |scenario| 
    platform = scenario.location.file.split(File::SEPARATOR)[1].to_sym 
    #=> :admin:, :desktop or :mobile 

    # Output the platform (or whatever conditional logic you want) 
    case platform 
    when :admin then puts 'admin' 
    when :desktop then puts 'desktop' 
    when :mobile then puts 'mobile' 
    end 
end 
+0

Wow, génial! Justin - tu es le meilleur! Merci! –

0

Si vous utilisez la version Ruby 2.0 et ci-dessus est la méthode __dir__ votre chemin à parcourir (au cas où vous voulez obtenir le chemin absolu):

# File: /home/xxx/folder/features/admin/test.rb puts __dir__ # => "/home/xxx/folder/features/admin"

Mais si vous voulez seulement connaître le nom du répertoire où réside le fichier? Ensuite, vous pouvez utiliser File.basename:

# File: /home/xxx/folder/features/admin/test.rb puts File.basename(__dir__) # => "admin"