2010-07-17 17 views
2

Je voudrais obtenir machinist, machinist_mongo, mongo_mapper, cucumber et pickle pour jouer ensemble sympa.Comment obtenir du concombre et du pickle avec mongo_mapper, machinist et machinist_mongo?

Actuellement, j'ai machiniste avec tous mes blueprints configurés et j'utilise le concombre pour faire BDD. Jusqu'ici tout va bien. Mon problème est que je dois écrire des étapes de concombre sur mesure pour tous mes plans machinistes. Ce n'est pas vraiment un problème en soi, car ça ne m'arrête pas, mais en tant que développeur .NET, je me sens vraiment mal de devoir écrire une étape pour chaque plan, alors qu'en .NET je pourrais probablement utiliser réflexion.

Y a-t-il un moyen d'obtenir des cornichons intégrés dans capture_model, capture_plural_factory, etc., pour reconnaître mes plans de machiniste?

Je suis assez confiant que j'ai machiniste configuré et mis en place correctement, parce que lorsque j'utilise blueprintname.make, dans une étape de concombre personnalisé, tout fonctionne correctement.

versions Gem:

rails 2.3.8 0.8.3 concombre
concombre-rails 0.3.2

mongo 1.0.5 0.8.2 mongo_mapper

pickle 0.3.0 machiniste 1,0. 6
machinist_mongo 1.1.1


caractéristiques/support/pickle.rb:
require 'pickle/world' 
Pickle.configure do |config| 
    config.adapters = [:machinist] 
end 

J'ai essayé d'utiliser config.adapters = [:machinist, Machinist::MongoMapperAdapter] mais je reçois une erreur indiquant qu'il n'y a pas de méthode factories pour Machinist::MongoMapperAdapter.

méthode non définie usines pour Machiniste :: MongoMapperAdapter: Classe (NoMethodError) /usr/local/lib/ruby/gems/1.8/gems/pickle-0.3.0/lib/pickle/config.rb: 25: dans `usines

caractéristiques/support/machinist.rb:
require 'machinist' 
require 'machinist/mongo_mapper' 
require "#{Rails.root}/spec/blueprints" 
require 'database_cleaner' 
Before { Sham.reset } # reset Shams in between scenarios 
spec/blueprints.rb (tronqué pour plus de clarté)
require 'sham' 
require 'faker' 

Sham.code { Faker::Lorem.words 1 } 

AccessCode.blueprint do 
    code 
end 
app/models/access_code.rb
class AccessCode 
    include MongoMapper::Document 

    key :code, String, :required => true 
end 

Répondre

0

Après avoir passé des jours à me battre la tête contre le mur, j'ai tout pour travailler (je dis surtout travailler parce que je ne suis pas sûr s'il y a quelque chose de mal que je n'ai pas encore découvert). Le correctif était en fait assez simple une fois que je l'ai compris.

Pour résoudre le problème, et obtenir mes cucumber étapes de travail avec pickle, j'ai changé MongoMapper::Document pour inclure Pickle::Adapter::Base. J'ai utilisé lib/pickle/adapteurs/active_record.rb et data_mapper.rb (même chemin que active_record.rb) fournis avec pickle comme exemple. J'avais encore besoin de machinist_mongo, vraisemblablement pour brancher des cornichons à mes plans de machinistes.

Je ne peux pas prendre le crédit pour le code dans def self.model_classes - il est volé de tjtuom's pickle fork.

PS. Si c'est la façon complètement mauvaise de le faire, n'hésitez pas à critiquer ou donner des suggestions, je suis un ruby ​​noob complet.

module MongoMapper::Document 
    module PickleAdapter 
    include Pickle::Adapter::Base 

    def self.model_classes 
     @@model_classes ||= ::MongoMapper::Document.descendants.to_a + 
     ::MongoMapper::Document.descendants.map { |klass| klass.subclasses }.flatten 
    end 

    # get a list of column names for a given class 
    def self.column_names(klass) 
     klass.column_names 
    end 

    # Get an instance by id of the model 
    def self.get_model(klass, id) 
     klass.find(id) 
    end 

    # Find the first instance matching conditions 
    def self.find_first_model(klass, conditions) 
     klass.find(:first, :conditions => conditions) 
    end 

    # Find all models matching conditions 
    def self.find_all_models(klass, conditions) 
     klass.find(:all, :conditions => conditions) 
    end 
    end 
end 

Mettre en place cornichon pour machiniste:

Pickle.configure do |config| 
    config.adapters = [:machinist] 
end 

Pour configurer database_cleaner pour mongo:

require 'database_cleaner' 
require 'database_cleaner/cucumber' 

DatabaseCleaner.orm = 'mongo_mapper' 
DatabaseCleaner.strategy = :truncation 
Questions connexes