I'm writing a spec for a controller in Rails 3 project using RSpec and Capybara, and I want to select current date from a select box. I tried:
select Date.today, :from => 'Date of birth'
but the spec fails and I get error:
Failure/Error: select Date.today, :from => 'Date of birth' NoMethodError: undefined method `to_xpath' for Mon, 18 Jul 2011:Date
How to fix it?
P.S. In view file I use simple_form_for tag and the select box is generated by code:
f.input :date_of_birth
In my particular situation, I'm adding potentially multiple date select fields to the page with
accepts_nested_attributes_for
functionality. This means, I'm not sure what the fullid
orname
of the fields are going to be.Here's the solution I came up with in case it helps anyone else Googling this:
I'm wrapping the date select field in a container div with a class:
Then in my feature spec:
Here's a helper method I wrote for it:
Then using the helper:
Thanks to Dylan for pointing it out, but in case anyone is looking for the cucumber version, you can use this:
For more information, see select_date.
You need to specify the exact value as it's in the select menu in html. So if your select has values like "2011/01/01" then you need to write:
Your code fails because you pass a date object.
A slight adaption of Markus's answer:
I found a clean solution for rspec and capybara to test using date and time select methods, where in your HTML you use a datetime select or date select. This works with Rails 4, RSpec 3.1 and Capybara 2.4.4.
Say in your HTML form you have the following:
the DateTime Select View helper will create 5 select fields with ids such as
id="modelname_start_date_1i"
, where the id the is appended with 1i, 2i, 3i, 4i, 5i. By default Year, Month, Day, Hour, Minute. If you change the order of the fields, make sure to change the feature helper below.1) Create a Feature Helper for dates and times helpers
spec/support/helpers/date_time_select_helpers.rb
Note that for the day I use
%-d
that gives you a non-padded numeric value (i.e. 4) instead of%d
that has a zero-padded numeric value (i.e. 04). Check the date formats with strftime2) You then need to include your date and time helpers methods in spec/support/helpers.rb so you can use them in any spec file.
3) In your Spec file you can call your helper. For example:
Had the same problem. I googled at lot and solved it this way:
Wrote date select macros into /spec/request_macros.rb The select_by_id method is necessary for me, because the month is dependent on the translation
Added them to my /spec/spec_helper.rb
Now in my integration tests in spec/requests i can use
Thanks to http://jasonneylon.wordpress.com/2011/02/16/selecting-from-a-dropdown-generically-with-capybara/ and https://gist.github.com/558786 :)