Forum: Ruby on Rails test::unit

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Hello G. (Guest)
on 2009-02-18 01:01
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:
[code] 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[/code]
i became failures like this
[code]
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
[/code]
I don't know whats wrong.
please help.
Frederick C. (Guest)
on 2009-02-18 01:27
(Received via mailing list)
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
Phlip (Guest)
on 2009-02-18 04:20
(Received via mailing list)
>> 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
Hello G. (Guest)
on 2009-02-18 16:15
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
Phlip (Guest)
on 2009-02-18 17:05
(Received via mailing list)
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.
Hello G. (Guest)
on 2009-02-18 22:48
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?
Phlip (Guest)
on 2009-02-19 00:00
(Received via mailing list)
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!
Hello G. (Guest)
on 2009-02-19 11:24
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
Phlip (Guest)
on 2009-02-19 21:34
(Received via mailing list)
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
This topic is locked and can not be replied to.