9

I put the following code into an RSpec test:

it { should validate_format_of(:email).not_with('test@test')}

and setup the actual class with:

validates :email, :presence => true, :format => /\b[A-Z0-9._%-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}\b/i

And when I run the tests I get:

Failures: 1) User Failure/Error: it { should validate_format_of(:email).not_with('test@test')} Expected errors to include "can't be blank" when email is set to "test@test", got errors: ["name can't be blank (nil)", "email is invalid (\"test@test\")"] # ./spec/models/user_spec.rb:8:in `block (2 levels) in '

When I do a passing test like:

it { should validate_format_of(:email).with('adam@trimediatlantic.com')}

Everything works as expected. Can someone tell me if I'm doing something wrong or if this is a framework problem. Thank you.

zetetic
  • 47,184
  • 10
  • 111
  • 119
user426623
  • 91
  • 1
  • 3

3 Answers3

27

Try this instead:

it { should_not allow_value("test@test").for(:email) }
zetetic
  • 47,184
  • 10
  • 111
  • 119
3

I just ran into a similar problem Turns out you need to invoke the with_message method and supply the exact error message as a string, or a regex that matches the error message. Doing so will convince the validate_format_of to cease its stubborn insistence that format errors result in "can't be blank" messages, and actually pass. For example:

it { should validate_format_of(:email).not_with('test@test')}

becomes

it { should validate_format_of(:email).not_with('test@test').with_message(/invalid/)}

This sure looks like a bug in the shoulda library.

thatothermitch
  • 304
  • 1
  • 6
  • Also note that you need to invoke with_message on "with" cases as well, or else it'll errantly succeed because it's looking for "cant be blank" in the error list of the field being validated. – thatothermitch Mar 15 '11 at 20:40
0

From Shouda Matchers 2.0, validate_format_of was deprecated. Please use allow_value.

should validate_format_of(:email).with('user@example.com')

to

should allow_value('user@example.com').for(:email )

from thoughtbot blog: https://thoughtbot.com/blog/shoulda-matchers-2-0#validate_format_of

ryush00
  • 455
  • 1
  • 5
  • 21