Test::unit


#1

Hello,

im trying since a few days with unit test.
my problem is, i have write a test for 7 validates_presence_of and its
ok.
then i have write 2 validates_uniqueness_of and its ok.
then i have write 1 test for validates_format_of :postcode, :with =>
/^\d{5}$/
its also ok.
if i have write a test for validates_format_of :street, :with =>
/^([[:alpha:]]+\s)+\d*$/ like this:

def test_street_format ok = ["on the road 7", "my street"] notok = ["8ue kd9", "die 8.straße 9"] ok.each do |name| sp = Me.new(:name => "MyString", :contact_person => "My person", :location => "Mybla", :postcode => "12345", :street => name, :password => "MyStkdju", :email => "removed_email_address@domain.invalid") assert sp.valid? #, sp.errors.full_messages notok.each do |name| sp = Me.new(:name => "MyString", :contact_person => "My person", :location => "Mybla", :postcode => "12345", :street => name, :password => "MyStkdju", :email => "removed_email_address@domain.invalid") assert !sp.valid? end end end
i became failures like this

1) Failure:
test_postcode_format(MeTest):
<false> is not true.


2) Failure:
test_street_format(MeTest):
<false> is not true.

Finished in 0,139 seconds.
8 tests, 2 failures, 0 errors

I don’t know whats wrong.
please help.


#2

On Feb 17, 11:01 pm, Hello G. removed_email_address@domain.invalid
wrote:

/^([[:alpha:]]+\s)+\d*$/ like this:
Looks to me like this regexp means that “my street” cannot match
(since you’ve said that each of your words must be finished by a space
(so i would expect "my street " to pass)).
Other than that you need to do some detective work: what line is it
failing on ? with what input ? which validations are failing etc.

Fred


#3

then i have write 1 test for validates_format_of :postcode, :with =>
/^\d{5}$/
its also ok.

Looks to me like this regexp means that “my street” cannot match
(since you’ve said that each of your words must be finished by a space
(so i would expect "my street " to pass)).
Other than that you need to do some detective work: what line is it
failing on ? with what input ? which validations are failing etc.

Next advice: Comment out every test that fails, then write a test like
this:

assert_match ‘12348’, /^\d{5}/

If you have trouble with a high-level test, scratch it and write a
low-level
one; one that only targets the details. In this case, you are not even
testing
the actual validator; you are using the testing to learn which regexps
work.


Phlip
http://broadcast.oreilly.com/2009/02/merb-mind-maps.html


#4

Frederick C. wrote:

On Feb 17, 11:01�pm, Hello G. removed_email_address@domain.invalid
wrote:

/^([[:alpha:]]+\s)+\d*$/ like this:
Looks to me like this regexp means that “my street” cannot match
(since you’ve said that each of your words must be finished by a space
(so i would expect "my street " to pass)).
Other than that you need to do some detective work: what line is it
failing on ? with what input ? which validations are failing etc.

Fred

hello,

my test for validates_format_of :street, :with =>
/^[[:alpha:]]+\s{1}[[:alpha:]])\d*$/ is this:

def test_street_format
ok = [“on road 7”, “yourstreet”]
notok = [“8ue kd9”, “die 8.straße 9”]
ok.each do |name|
sp = Me.new(:name => “MyString”, :contact_person => “My person”,
:location => “Mybla”, :postcode => “12345”, :street => name, :email =>
“removed_email_address@domain.invalid”)
assert sp.valid? #, sp.errors.full_messages
notok.each do |name|
sp = Me.new(:name => “MyString”, :contact_person => “My person”,
:location => “Mybla”, :postcode => “12345”, :street => name, :email =>
“removed_email_address@domain.invalid”)
assert !sp.valid?
end
end
end

is my test not ok?

i hope someone can help me please


#5

Phlip wrote:

Did you also write a simpler test with only the rexexps and their
targets in it?

If a test that starts too far from your tested code is hard to work
with, that
is a sign you need more support from a lower-level test.

Hello,

my English isnt so good, sorry. I dont understand everything you wrote.
can you give me an example for a simpler test for my situation?


#6

Hello G. wrote:

my test for validates_format_of :street, :with =>
/^[[:alpha:]]+\s{1}[[:alpha:]])\d*$/ is this:

 assert !sp.valid?

is my test not ok?

Did you also write a simpler test with only the rexexps and their
targets in it?

If a test that starts too far from your tested code is hard to work
with, that
is a sign you need more support from a lower-level test.


#7

Hello G. wrote:

my English isnt so good, sorry. I dont understand everything you wrote.
can you give me an example for a simpler test for my situation?

in your model:

VALIDATE = /@#$%^/
validates_format_of :snoo, VALIDATE

in the test:

def test_validate
assert_match Model::VALIDATE, ‘something’
end

That’s all. Don’t build everything just to test the Regexp - just test
it directly!


#8

Phlip wrote:

Hello G. wrote:

my English isnt so good, sorry. I dont understand everything you wrote.
can you give me an example for a simpler test for my situation?

in your model:

VALIDATE = /@#$%^/
validates_format_of :snoo, VALIDATE

in the test:

def test_validate
assert_match Model::VALIDATE, ‘something’
end

That’s all. Don’t build everything just to test the Regexp - just test
it directly!

ok thank you. i try this:
in model:
validates_format_of :street, :with =>
/^[[:alpha:]]+\s{1}[[:alpha:]])\d*$/

in test:
def test_street_try
assert_match(/^[[:alpha:]]+\s{1}[[:alpha:]])\d*$/, ‘The Road 9’)
end

but i become this:
Finished in 0,0 seconds.
0 tests, 0 failures, 0 errors

whats wrong now? i dont know


#9

Hello G. wrote:

ok thank you. i try this:
in model:
validates_format_of :street, :with =>
/^[[:alpha:]]+\s{1}[[:alpha:]])\d*$/

in test:
def test_street_try
assert_match(/^[[:alpha:]]+\s{1}[[:alpha:]])\d*$/, ‘The Road 9’)
end

The // regexp in the validation should be the same one passed to the
test.
That’s so when you change the validation, the test will still cover it.

That’s why I suggested putting the regexp into a constant.

but i become this:
Finished in 0,0 seconds.
0 tests, 0 failures, 0 errors

You are not running any tests, because your assertion should have
counted.

Try with this:

assert false

in a test. If your tests don’t break, then you are not running them!


Phlip