2. Why fixtures aren't enough „Rails test fixtures are evil and a plague upon developers.” http://b.logi.cx/2007/11/26/object-daddy „If you are still using fixtures, there is no hope for you. Become a forest ranger.” http://blog.adsdevshop.com/2009/02/23/factories-for-test-objects-use-them/
3.
4. no one remembers the „story” it "should be possible to delete a folder only in a group that you're a member of" do folder = folders(:ruby) folder.should be_deletable_by(users(:joe)) folder.should be_deletable_by(users(:joan)) folder.should_not be_deletable_by(users(:bill)) end
28. Object Daddy class User < ActiveRecord::Base generator_for :email, :start => 'test@domain.com' do |prev| user, domain = prev.split('@') user.succ + '@' + domain end generator_for :username, :method => :next_user generator_for :name, :start => 'Joe' generator_for(:start_time) { Time.now } generator_for :name, 'Joe' generator_for :age => 25 def self.next_user @last_username ||= 'testuser' @last_username.succ end end
29. Object Daddy class User < ActiveRecord::Base generator_for :ssn, :class => SSNGenerator end class SSNGenerator def self.next @last ||= '000-00-0000' @last = ("%09d" % (@last.gsub('-', '').to_i + 1)).sub(/^({3})({2})({4})$/, '--') end end
30. Object Daddy it "should have a comment for every forum the user posts to" do @user = User.generate @post = Post.generate @post.comments << Comment.generate(:title => 'first post!!11') @user.should have(1).comments end admin_user = User.generate! do |user| user.activate! user.add_role("admin") end User.spawn # User.new
46. Machinist # /spec/blueprints.rb, /test/blueprints.rb Business.blueprint do name { "My Company" } address { "New York" } web { "http://www.example.com" } email { "info@example.com" } end business = Business.make invalid_business = Business.make(:email => "bad@email") Business.make_unsaved Business.plan # hash
47. Machinist User.blueprint do email { Sham.email } # or just: email end Sham.email { something random } Sham.invoice_no { |index| "20080101-#{index}" } Sham.name { Faker::Name.name } # http://faker.rubyforge.org/ Faker::Company.name Faker::Internet.email Faker::Internet.domain_name Faker::Lorem.sentence
48. Machinist User.blueprint do name { Sham.name } email { Sham.email } business { Business.make(:name => "#{name} Shop") } # or just: business end