test::unit

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:

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

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.

Frederick Cheung 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 =>
"MyStri@test.de")
     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 =>
"MyStri@test.de")
     assert !sp.valid?
     end
   end
end

is my test not ok?

i hope someone can help me please

Hello Guy 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.

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?

Hello Guy 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!

Phlip wrote:

Hello Guy 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

Hello Guy 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!