merbでfixture

merbにはrailsのfixture機能は存在しない。
なにか代わりがないかと探したところdm-sweatshopを使うようだ。

# spec/spec_helper.rb
@@ -12,6 +12,9 @@
 # this loads all plugins required in your init file so don't add them
 # here again, Merb will do it for you
 Merb.start_environment(:testing => true, :adapter => 'runner', :environment => ENV['MERB_ENV'] || 'test')
+require 'dm-sweatshop'
+require File.join(File.dirname(__FILE__), 'spec_fixtures')
+

spec_fixtureを用意*1

# spec/spec_fixture.rb
password = 'password'
salt     = 'salt'
User.fix { {
    :login            => /\w+/.gen,
    :crypted_password => (password = User.encrypt(password, salt)),
    :salt             => salt
  }}

fixtureを使うところでUser.genメソッドをコールする*2

# spec/requests/users_spec.rb
@@ -74,6 +69,7 @@
 describe "resource(@user, :edit)", :given => "a user exists" do
   before(:each) do
+    User.gen
     @response = request(resource(User.first, :edit))
   end

@@ -82,10 +78,11 @@
   end
 end

*1:.genというメソッドを使うにはrandexpというgemがいるので $ sudo gem install randexpde でインストールしておく

*2:merb-gen resource user で作成されるspecを例に使っている