2011-04-26 7 views
8

comment puis-je utiliser TDD avec MongoDB comme ma seconde base de données?TDD: Rspec Ruby MongoDB/Ruby Mongo pilote

Merci

Edit:

Utilisation Rspec ou toute autre chose qui me permet de le tester.

+0

Êtes-vous juste en utilisant le pilote MongoDB nu, ou avez-vous un ORM comme MongoMapper, MongoId, etc? En outre, utilisez-vous MongoDB comme couche de persistance pour vos modèles, pour la mise en cache, les fichiers via GridFS, etc? Quelques informations supplémentaires seraient utiles. – michaeltomer

+0

Seul le mappeur ruby ​​mongo et non pas comme base de données principale. Pas de cache, rien. Cependant, il représente une grande partie des applications qui sauve des tonnes de données persistantes. – donald

+0

Vous parlez d'une architecture ployglot droite? certains modèles avec activerecord, d'autres comme documents mongo? Je peux montrer comment je le fais avec mongomapper, intéressé? – oma

Répondre

4

[Mise à jour] Avec MongoMapper mis en place, vous pouvez facilement utiliser la connexion MongoDB directement

mongodb = MongoMapper.database 
collection = mongodb.collection("my_collection") 
collection.find.first 
=> {"_id"=>BSON::ObjectId('4e43dfc75d1e1e0001000001'), "key1"=>"val1" } 

cette autre SO Q/A est encore plus direct, en utilisant les fonctions javascript comme MongoMapper.database.eval(Mongo::Code.new('function(){ return 11 + 6; })

[/ mise à jour]

J'ai une telle architecture polyglotte, certains modèles avec postgresql, d'autres comme mongo docu ments. Je ne suis pas vraiment sûr de ce que vous demandez, alors je vais directement entrer et afficher la plupart de ma configuration ici. Il comprend mes hacks, vous trouverez probablement plus belle config ailleurs.

Je mis la configuration dans un point essentiel https://gist.github.com/957341

OK, voici donc un document avec le document intégré, puis la spécification. J'ai écrit les spécifications une par une, elles sont donc testées.

class MyDocument 
    include MongoMapper::Document 
    key :title, String 
    key :published_at, Time, :index => true 
    key :collaborators, Array 

    many :my_embedded_documents 
end 
class MyEmbeddedDocument 
    include MongoMapper::EmbeddedDocument 
    key :title, String 
    key :author, String 
    embedded_in :my_document 
end 

la spécification

require "spec_helper" 

describe MyDocument do 

    before do 
    @md = MyDocument.create(:title => "Example", :collaborators => ["mongomapper", "rspec", "oma"]) 
    end 
    it "should have title" do 

    found = MyDocument.find(@md.id) 
    found.title.should == "Example" 
    end 

    it "should have two my_documents" do 
    MyDocument.create 
    MyDocument.count.should == 2 
    end 

    it "should be able to fetch embedded documents" do 
    @md.my_embedded_documents << MyEmbeddedDocument.new(:title => "The King", :name => "Elvis Presley") 
    @md.my_embedded_documents.build(:title => "Embedded example", :name => "Embeddo") 
    @md.save! 
    MyDocument.where(:title => "Example").first.should == @md #findMyEmbeddedDocument.count.should == 2 
    end 

end 

spec_helper.rb

RSpec.configure do |config| 
    #... 
    config.after(:each) do 
    MongoMapper.database.collections.each(&:remove) 
    end 
end 

Je ne sais pas ce que vous vouliez des réponses, mais j'espère que cela sera utile à quelqu'un.

0

De ce que je comprends, il ne semble pas que votre application colle aux rails paradigme MVC avec l'utilisation de cette base de données secondaire qui ne semble pas de données de modèle de magasin.

Je vous recommande de prendre les parties auxiliaires de l'application qui dépendent de mongo et de les coller dans une bibliothèque. Vous pouvez en faire un petit bijou s'il est logique de l'utiliser ailleurs. Ensuite, créez un testsuite pour la logique de la bibliothèque à l'aide des outils de test standard, et à intégrer dans votre application soit avec un simple besoin ou certaines directives (en fonction de ce qu'il meurt et comment vous avez l'intention de l'utiliser).

Questions connexes