TDD: Rspec Ruby MongoDB / драйвер Ruby Mongo - PullRequest
8 голосов
/ 27 апреля 2011

как я могу использовать TDD с MongoDB в качестве моей второй базы данных?

Спасибо

Edit:

Использование Rspec или чего-либо еще, что позволяет мне его протестировать.

Ответы [ 2 ]

4 голосов
/ 05 мая 2011

[Обновление] С установленным 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]

У меня такая архитектура полиглота, некоторые модели с postgresql, другие как документы mongo. Я не совсем уверен, о чем вы спрашиваете, поэтому я прыгну прямо и выложу большую часть своей конфигурации здесь. Она включает в себя мои хаки, вывероятно, найти более красивый конфиг в другом месте.

Я поместил настройку в суть https://gist.github.com/957341

ОК, так что вот документ со встроенным документом, а затем спецификации. Я написал спецификации один за другимтак что они вроде как тестовые.

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

spec

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 голосов
/ 01 мая 2011

Из того, что я могу извлечь, не похоже, что ваше приложение придерживается парадигмы MVC rails с использованием этой вторичной базы данных, которая, очевидно, не хранит данные модели.

Я бы порекомендовал взять вспомогательные части приложения, которые зависят от монго, и вставить их в библиотеку. Вы можете сделать это драгоценным камнем, если есть смысл использовать его в другом месте. Затем создайте тестовый набор для логики библиотеки, используя стандартные инструменты тестирования, и интегрируйте в свое приложение либо с простым требованием, либо с некоторыми директивами (в зависимости от того, что он умирает и как вы собираетесь его использовать).

...