How to test that a specific error message is thrown

Hi,

If I have this line in my model: validates_presence_of :name, :message => "Please enter a name"

and I test this with the following code:

def test_should_require_name   user= User.new(valid_user_attributes(:name => ""))   assert !applicant.save end

Is there a way to write an additional test to ensure that not only the name field may not be blank, but that if it is blank the message "Please neter a name" is thrown?

Many thanks

Yep

try...

def test_should_not_be_valid_without_name   user = User.new   user.valid?   assert_equal user.errors.on(:name), "Please enter a name" end

Hi,

That worked perfectly. Thank you very much.

You're welcome.

Just a little advice -

It's generally better practice to be more specific with the names of your tests. I find it helps define exactly what it is you're testing for.

Here's an article about BDD if you're interested: Introducing BDD - Dan North & Associates Ltd

I'd also recommend checking out rspec.

It's a BDD framework that helps you write tests that feel a lot more intuitive than the default rails testing suite.

simply install the rspec gem and the rspec-rails gem

Specs are written like:

describe User do

  it "should not be valid without a name" do     user = User.new     user.valid?     user.errors.on(:name).should == "can't be blank"   end

end

Hope you find that useful :slight_smile:

Hope you find that useful :slight_smile:

Thanks for the tip. I'm currently reading a book "Professional Webdevelopment with RoR2" by Jens-Christian Fischer and he's just getting into Rspec. I wasn't sure how indepth I should read that part, but now I will definitely take the time to check it out.