On 26 February 2012 16:36, S Ahmed <sahmed1...@gmail.com> wrote:

> I'm testing my signup page, and I want to minimize the duplication of the
> fill_in code for filling in the form fields and testing how my page reacts
> when someone forgets to enter input.
>
> fill_in "....", with: "abc123"
>
> Any tricks of doing this?
>
> Say I have 10 fill_in calls, so say I want to test to make sure the form
> fails if any combination of the last 4 fields are missing.
>
> I was thinking of putting the first 6 fill_in calls into a method, and
> then calling that method:
>
> it "should ..." do
>   enter_first_6
>   # now enter 3 of the 4 and verify
> end
>
> it "should ..." do
>   enter_first_6
>   # now enter a different combination of the last 4 fields
> end
>
> I haven't tested this yet, just brainstorming, any other advise?
>
> I wish things worked liked attribute hashes where you could just call
> .merge and change the default set.
>
> _______________________________________________
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>


Quite a good way to do this is to create a hash that has all your values
and then modify the hash for your errors. So you could do something like

def good_attrs()
  {
     :foo => 'foo'
     :bar => 'bar
     ...
  }
end

then have a fill in method that takes the hash

def fill_in(attrs)
  attrs.each do |k,v|
    fill_in k, :with => v
    ...

finally do your errors by

fill_in(good_attrs(:with => {:foo => nil})

or use :except etc.

You can also put your a spec inside a loop

%w(foo bar bax).each do |bad_attr|
   it "should ... #{bad_attr}..." do
     fill_in(good_attrs(:except => {:bad_attr})

etc.

All of top of my head so expect syntax errors, but hopefully enough to be
useful

All best

Andrew

HTH

Andrew
-- 
------------------------
Andrew Premdas
blog.andrew.premdas.org
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to