2011-04-26 84 views
8

如何將TDD與MongoDB用作我的第二個數據庫?TDD:Rspec Ruby MongoDB/Ruby Mongo驅動程序

感謝

編輯:

使用Rspec的或其他任何東西,讓我來測試它。

+0

你剛剛使用的是純粹的MongoDB驅動程序,還是你有像MongoMapper,Mongoid等ORM?另外,您是否將MongoDB用作模型的持久層,通過GridFS進行緩存,文件等?一些額外的信息將是有用的。 – michaeltomer 2011-04-29 14:40:48

+0

只有紅寶石mongo映射器而不是主數據庫。沒有緩存,什麼都沒有。但是,它代表了節省大量持久數據的應用程序的很大一部分。 – donald 2011-04-29 15:23:28

+0

你在談論一個ployglot體系結構的權利?有些主動記錄模式,其他模式爲mongo文件?我可以證明我是如何用mongomapper做的,感興趣嗎? – oma 2011-05-04 19:15:04

回答

4

[更新] 隨着MongoMapper設置可以很容易地使用mongodb的連接直接

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

此其他SO Q/A是更直接的,使用JavaScript功能類似於MongoMapper.database.eval(Mongo::Code.new('function(){ return 11 + 6; })

[/ update]

我有這樣的polyglot體系結構,一些模型與postgresql,其他作爲mongo文件發言:。我不太確定你在問什麼,所以我會直接跳入並在這裏發佈最多的配置。它包括我的黑客,你可能會在其他地方找到更漂亮的配置。

我把設置在一個要點 https://gist.github.com/957341

OK,所以這裏的嵌入文檔,那麼規範的文件。我一個一個地寫了規格,所以他們有點受試駕。

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 

規範

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 

我不知道你想要的答案,但我希望這將是幫助別人。

0

從我可以收集,它似乎並沒有看到你的應用程序堅持使用這個輔助數據庫,顯然不存儲模型數據的軌道MVC範例。

我會建議取決於mongo的應用程序的輔助部分,並將它們粘貼到一個庫中。如果在其他地方使用它是有意義的,你可以把它變成寶石。然後,使用標準測試工具爲庫的邏輯創建一個測試套件,並通過簡單的需求或某些指令(取決於它的死亡以及打算如何使用它)將其集成到您的應用程序中。

相關問題