Capybara with redirect

I am having an issue where a feature works fine but the corresponding
test fails, and I can't understand why.
I created a mock application to demonstrate the problem.

https://github.com/assafshomer/clear_button

All it does is show an input form with a clear button. The clearing
happens by redirecting back to the same form. It does clear it when you
run the app, but the test for it fails.

If you feel inclined to help, please clone the repo and run the test
mentioned in the readme (or the full suite, which is very short). The
test fails (at least for me) but if you run the app
(http://localhost:3000/pages/input) the 'Clear' button does seem
to be doing the right thing.

Help?

Just a quick glance, but you probably should move lines 10-16 (the
before and it blocks) inside their own describe block, as the before
block at line 10 is also running before every it in the other describe
blocks.

tamouse mailing lists wrote in post #1108701:

Both the before at line 10 through the end of the it test at line 16
need to be in their own describe block, not just the test.

tamouse mailing lists wrote in post #1108719:

let me push my change up and do a PR and see if you can see a diff: it
works for me.

https://github.com/assafshomer/clear_button/pull/1

Okay, as near as I can figure out, capybara is choking on the fact
that you have commit=Show in your query string, you're using
method=GET in your form, and commit=Clear is coming in the request
body. Somehow, when rails is called by the browser, this is handled in
the way you want (which is the request body's commit=Clear overrides
the one in the query string), but in capybara, it isn't.

tamouse mailing lists wrote in post #1108881:

https://github.com/assafshomer/clear_button/pull/1

On Mon, May 13, 2013 at 11:20 PM, tamouse mailing lists

Tamouse, thank you.
However, your pull nullifies the test.
Your test clicks the clear button without first writing anything in the
input field, so obviously clearing the empty input field leaves you with
an empty input field.
In order that the test actually tests something, it must first write
something into the input field and then try to clear it.

any other ideas?

maybe read my follow up

and now i'm not going to bother spending any more time on it