[rspec-users] Rails Model Test

Matthew Smith matthewcalebsmith at gmail.com
Fri Oct 29 11:57:29 EDT 2010


Given this model:

class Organization < ActiveRecord::Base
  has_many :users

  validates :name, :presence => true
  validates :subdomain, :presence => true
  validate :has_at_least_one_user

  private
    def has_at_least_one_user
      errors.add(:users, "Must have at least one user.") unless users.length > 0
    end
end

And this set of examples:

require 'spec_helper'

describe Organization do
  before do
    @organization = Organization.new(name:"an org", subdomain:"anorg")
  end

  it 'is valid with valid attributes' do
    @organization.users << mock_model("User")
    @organization.should be_valid
  end
  it 'is not valid without an organization name' do
    @organization.name = nil
    @organization.should_not be_valid
  end
  it 'is not valid without a subdomain' do
    @organization.subdomain = nil
    @organization.should_not be_valid
  end
  it 'is not valid if subdomain is not unique'
  it 'is not valid without at least one user' do
    @organization.users = []
    @organization.should_not be_valid
  end
end


I get this failure:

Failures:
  1) Organization is valid with valid attributes
     Failure/Error: @organization.users << mock_model("User")
     Mock "User_1001" received unexpected message :to_ary with (no args)
     # ./spec/models/organization_spec.rb:9:in `block (2 levels) in <top (required)>'


Question 1: Why can't I seem to add a mock User this way?

Question 2: Are there any better ways to test/implement a model that requires at least one association?

Thanks!

Matt Smith



More information about the rspec-users mailing list