Robert Klemme
3/31/2008 3:56:00 PM
2008/3/31, testautomated6@googlemail.com <testautomated6@googlemail.com>:
> On Mar 28, 9:28 am, Robert Klemme <shortcut...@googlemail.com> wrote:
>
> > On 28.03.2008 15:58, testautomat...@googlemail.com wrote:
> >
> > > Hi,
> >
> > > I use Ruby and Watir
> >
> > > I have a method:
> >
> > > def does_the_html_include(target)
> > > puts "HTML text of #{target} is being verified"
> > > if target.kind_of? String
> > > return $browser.text.include?(target)
> > > elsif target.kind_of? Regexp
> > > return $browser.text.match(target)
> > > end
> > > end
> >
> > > I wrap this up in a logger
> >
> > > def test_results(result, *msg)
> > > #make true explicit, everything else I am seeing as a failure
> > > if result == true
> >
> > This is a very bad idea, as only false and nil are false. Your code
> > above will especially break with the test because the regexp match will
> > either return nil or a MatchData object - which both will make "result
> > == true" false.
> >
>
>
> Good point.
>
>
> >
> > > test_status = @test.add_element 'teststatus'
> > > test_status.text = 'PASS'
> > > else
> > > fail = @test.add_element 'teststatus'
> > > fail.text = 'FAIL'
> > > fail_msg = @test.add_element 'failmessage'
> > > fail_msg.text = msg
> > > end
> > > end
> >
> > > However, when I don't want HTML text to appear, eg: an error. I want
> > > to do something better than this
> >
> > > boolean = does_the_html_include('You appear to have an active
> > > account')
> > > $test.test_results(!boolean, 'already have registered account')
> >
> > I am not sure what exactly it is that you want to improve. Do you
> > dislike the local variable?
>
> Yes. I am writing two lines when I should be writing one.
Well, if that's all that bothers you - you can easily inline it:
$test.test_results(!does_the_html_include('You..'), 'already have
registered account')
> > def test_results(msg)
> > if yield
> > # test ok
> > else
> > # not ok
> > end
> > end
> >
> > test_results "foo" { does_the_html_include('You appear to have an active
> > account') }
>
> Could you give a brief explanation of this code please?
The method invokes the block and uses the result to determine what to
do (if or else).
Does that help?
Kind regards
robert
--
use.inject do |as, often| as.you_can - without end