Validations aren't being performed when running 'rspec spec'

Hello,

When I run ‘rspec spec/models’ everything runs beautifully.
When I run ‘rspec spec/controllers’ everything also runs beautifully.
When I run ‘rspec spec’ the models seem to forget that the records
need to pass the validations before being saved to the database.

This is consistent across all model tests which are checking
validations.

Model:

validates_presence_of :name, :location, :email…

Test:

it “should ensure that name is present” do
Factory.build(:public_agent, :name => nil).should
have(1).error_on(:name)
end

All of these tests do not return errors and do add the invalid records
to the database.

Has anyone else had this happen? Suggestions?

Thanks!

On Wed, Feb 23, 2011 at 10:29 AM, Tom M. [email protected]
wrote:

All of these tests do not return errors and do add the invalid records
to the database.

Has anyone else had this happen? Suggestions?

Though I’m still using RSpec 1, I do use FactoryGirl. Factory.build only
instantiates a new record; it does not save it. Thus, the example that
you
shared should not create a record. Are you sure that the invalid records
that you’re seeing in the database are from this example?

Regards,
Craig

On Feb 23, 2011, at 9:29 AM, Tom M. wrote:

Model:

validates_presence_of :name, :location, :email…

Test:

it “should ensure that name is present” do
Factory.build(:public_agent, :name => nil).should have(1).error_on(:name)

Factory.build ^^ doesn’t even save records to the database in the first
place, so it would be surprising if this were the example that is
causing trouble.

Do you have any other specs besides models and controllers? helpers,
mailers, requests, etc? I’ve seen cases in which data was set up in
before(:all) (which does not run in a transaction and is therefore not
rolled back), and uniqueness validations would fail in other places.

What specific failure messages are you seeing?

[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Cheers,
David

Thanks for the replies.

Here’s the error I’m seeing when running all specs (.build
and .create):

Agent while creating should ensure that name is present
Failure/Error: Factory(:public_agent, :name => nil).should
have(1).error_on(:name)
expected 1 error on :name, got 0
# ./spec/models/agent_spec.rb:35:in `block (3 levels) in <top
(required)>’

Here’s what I’m seeing when running model specs with .create:

Agent while creating should ensure that name is present
Failure/Error: Factory(:public_agent, :name => nil).should
have(1).error_on(:name)
ActiveRecord::RecordInvalid:
Validation failed: Name can’t be blank
# ./spec/models/agent_spec.rb:35:in `block (3 levels) in <top
(required)>’

Everything passes when running model specs with .build.

Thanks again!

On Thu, Feb 24, 2011 at 2:07 PM, Tom M. [email protected]
wrote:

(required)>’

Everything passes when running model specs with .build.

Have you tried with Agent.new and/or Agent.create? Maybe factory_girl is
doing something strange.

Also, what versions of rails, rspec-rails, rspec and factory_girl are
you
using?

Craig

Thanks for all of your insight guys.

As it turned out the culprit was
“.any_instance.stubs(:valid?).returns(false)” which was being run in
the controllers.
I changed some things around any now everything is working as
expected.

I was using the following:

Rails 3.0.0
RSpec 2.4.0
RSpec Rails 2.4.1
Factory Girl 2.0.0.beta1

Thanks again!

I should also note that if I replace “.should have(1).error_on(:name)”
with, simply, “.should be_valid”. The same issues occur. All specs
(except when only running models) pass when they shouldn’t be.