Note that there are some explanatory texts on larger screens.

plurals
  1. PORSpec Test of Custom Devise Session Controller Fails with AbstractController::ActionNotFound
    primarykey
    data
    text
    <p>I am currently trying to test a custom Devise session controller with rspec. My controller looks like this:</p> <pre><code>class SessionsController &lt; Devise::SessionsController def create #valid email? if !(params[:email] =~ /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/) set_flash_message :notice, "Please enter a valid e-mail address!" end super end end </code></pre> <p>My RSpec Controller Test is this:</p> <pre><code>require 'spec_helper' require 'devise/test_helpers' describe SessionsController do it "should put a warning on invalid mail address login attempt" do post :create, :user =&gt; {:email =&gt; 'invalidEmailAddress'} response.should contain "Please enter a valid e-mail address!" end it "should put no warning on valid mail address login attempt" do pending end end </code></pre> <p>If I execute the RSpec Test it fails with the following line:</p> <pre><code>Failure/Error: post :new, :user =&gt; {:email =&gt; 'invalidEmailAddress'} AbstractController::ActionNotFound # ./spec/controllers/sessions_controller_spec.rb:7 </code></pre> <p>Tips from the plataformatec Devise Wiki as well as <a href="http://groups.google.com/group/plataformatec-devise/browse_thread/thread/9bd524e5358a8197" rel="noreferrer">this post</a> did not solve this issue. Thanks for your help.</p> <p><strong>Addition</strong></p> <p>I investigated further. I was actually able to "remove" the error with the following addition to the controller spec:</p> <pre><code>before(:each) do request.env['devise.mapping'] = Devise.mappings[:user] end </code></pre> <p>But now a new error appears:</p> <pre><code>Failure/Error: post :create #currently fails with multiple render warning Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return". </code></pre> <p>Even with the create method left out in the inheriting controller the error appears. The error does not appear on get :new for example. It seems to be post :create only. I am out of ideas? Any help? Thanks!</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload