我以前也用過hibernate。 ActiveRecord的方式與hibernate非常不同。你需要放下心靈,無論好壞。在java和Hibernate中,你經常擁有聚合根和對象圖。通常情況下,對象圖和代碼庫在某種程度上都比較小。我不知道你的具體情況,所以我會小心翼翼地行事,但我警告你要嘗試適合ruby和rails,以符合你的java習慣。
您可以使用帶有rspec的自定義目錄以一種對您和您的團隊有意義的方式進行組織。
#spec/queries/my_custom_search_spec.rb
require 'spec_helper'
describe MyModel do
it "should do this query and return X" do
subject.some_defined_scope_search.should == "something"
end
end
,你可能有子目錄,由rspec的自動得到回升,像spec/models/account/..
該規範將自動被rake spec
或rspec spec
回升。我剛剛寫了一個簡單的例子,因爲我不知道你的情況。你是用查詢來定義範圍還是定義專門的方法?
我強烈建議放棄固定裝置(與插入相同 - 反模式,對我來說)爲更可重構的東西,如工廠。我喜歡factory_girl。它讓您的應用以更靈活的方式演變,IMO。
編輯: 加入我的spec_helper.rb具有用於啓用/禁用自動清理
RSpec.configure do |config|
require 'database_cleaner'
config.add_setting :skip_database_clean
config.skip_database_clean = false
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
end
config.after(:each) do
MongoMapper.database.collections.each(&:remove)
DatabaseCleaner.clean unless config.skip_database_clean
end
我添加變量skip_database_clean
這樣我可以啓用/每規格後禁用autocleanup設置(每個「它」) 。
before :all do
@an_object = some_expensive_test_buildup
RSpec.configuration.skip_database_clean = true
end
after :all do
RSpec.configuration.skip_database_clean = false
DatabaseCleaner.clean
end
來源
2011-05-09 21:39:50
oma
不確定「查詢」是什麼意思。在Rails中,最好將數據庫視爲持久對象的地方。 ActiveRecord對象更加精確。 ORM負責所有的數據庫邏輯和SQL。那些不需要被測試,除非你正在做一些違反公約的事情。 – 2011-05-04 14:29:26
@Mike Farmer如果您在請求特定值之前走過對象圖20次,ActiveRecord會在20個表之間創建一個複雜而有效的SQL連接? – egervari 2011-05-09 20:37:43
只要你正確地設置你的關聯,我真的不明白爲什麼不。來自數據庫背景,但我明白你的觀點。編寫測試以確保您的查詢構建正確並具有高性能是您指定的複雜性的好主意。爲您的關聯修改一些finder_sql,counter_sql,delete_sql和insert_sql對於更復雜的查詢也可能會有所幫助。請參閱(http://j.mp/lOSBkh) – 2011-05-12 16:55:13