On Oct 31, 2008, at 7:49 am, Matt Wynne wrote:
It also goes to the database, which will make it a slow unit test. I
personally do pretty much the same thing myself mostly when working
with ActiveRecord, but it doesn't mean I'm comfortable with it. (And
it also doesn't mean our unit test suite is anything other than
shamefully slow)
<snip>
Sounds interesting. I'd still like to see us have a proper ORM for
ruby that lets us play with POROs 90% of the time, and just have a
separate suite of tests for the database-object mappings that we run
when necessary.
I'm using DataMapper in a (non-web) project I have on now, and for
part of the spec suite where I am concerned with persistence as a
black-box, I create an in-memory SQLite database:
# story_spec.rb
describe "Class", Story do
# ...
describe ".unposted" do
include InMemoryDatabase
before(:each) do
setup_in_memory_database
@twitter_client = mock(TwitterAgent::Client, :post_story =>
true)
@story_1 = Story.create(:title => "Story title 1",
:published_at => DateTime.new(2008,
9, 28))
@story_2 = Story.create(:title => "Story title 2",
:published_at => DateTime.new(2008,
9, 29))
@story_3 = Story.create(:title => "Story title 3",
:published_at => DateTime.new(2008,
9, 27))
end
it "should find all stories (in ascending published date)
when none have been posted" do
Story.unposted.should == [ @story_3, @story_1, @story_2 ]
end
it "should find only unpublished stories (in ascending
published date)" do
@story_1.post_to_twitter!(@twitter_client)
Story.unposted.should == [ @story_3, @story_2 ]
end
end
end
# spec_helper.rb
module InMemoryDatabase
def setup_in_memory_database
DataMapper.setup(:default, "sqlite3::memory:")
Database::Migrator.new.reset_database!
end
end
Aside from being unable to use DB-lever constraints, that gives me
enough confidence in the persistence. Other specs that don't need
persistence simply omit the "setup_in_memory_database" call.
It's important not to lose sight of the fact that, even though
ActiveRecord mixes business logic and persistence, *they are still
separate concerns*.
Ashley
--
http://www.patchspace.co.uk/
http://aviewfromafar.net/
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users