Quickie snippet form-macro to make sure that the page you're on has the given set of form fields. You can optionally pass in a model name for "form_for" style forms (because these are pretty common), but it also lets you just pass in straight field names (for when you check your submits and hand-crafted tags).
Stick this at the bottom of your test_helper.rb and use as below:
should_have_form_fields [:name, :email, :phone, :gender], 'user'
Note: should work for text inputs as well as radio buttons and checkboxes (which is why we check for name not id - also means you don't match the label by accident). This assumes you've used Rails' helper_methods to generate your form fields - or that you have included a name on every field.
class ActionController::TestCase
# A macro to check that we should now have form fields for the given
# columns.
def self.should_have_form_fields(fields, model_name = nil)
return if fields.blank? # short circuit
fields = [fields] unless fields.respond_to?(:[]) # arrayify
fields.each do |f|
should "have field #{f} on form" do
assert_select 'form' do
if model_name.blank?
assert_select "[name=#{f}]"
else
assert_select "[name='#{model_name}[#{f}]']"
end
end
end
end
end
end
No comments:
Post a Comment