自定义设计会话控制器的RSpec测试失败AbstractController :: ActionNotFound [英] RSpec Test of Custom Devise Session Controller Fails with AbstractController::ActionNotFound
问题描述
我目前正试图用rspec测试一个自定义Devise会话控制器。我的控制器看起来像这样:
I am currently trying to test a custom Devise session controller with rspec. My controller looks like this:
class SessionsController < 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
我的RSpec控制器测试是这样:
My RSpec Controller Test is this:
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 => {:email => '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
如果我执行RSpec测试,它会失败,并显示以下行:
If I execute the RSpec Test it fails with the following line:
Failure/Error: post :new, :user => {:email => 'invalidEmailAddress'}
AbstractController::ActionNotFound
# ./spec/controllers/sessions_controller_spec.rb:7
来自plataformatec Devise Wiki的提示以及此信息没有解决这个问题。非常感谢您的帮助。
Tips from the plataformatec Devise Wiki as well as this post did not solve this issue. Thanks for your help.
添加
我实际上能够删除错误与以下添加到控制器规格:
I investigated further. I was actually able to "remove" the error with the following addition to the controller spec:
before(:each) do
request.env['devise.mapping'] = Devise.mappings[:user]
end
但现在出现一个新错误:
But now a new error appears:
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".
即使在继承控制器中遗漏了create方法,错误也会出现。错误不会出现在get:new例如。它似乎是post:只创建。
我的想法?任何帮助?
谢谢!
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!
推荐答案
我终于通过包括devise测试助手来修复我的问题,调用我的方法setup_controller_for_warden测试AND做request.env [devise.mapping] = Devise.mappings [:user]。像这样:
I finally fixed my problem by doing including the devise test helpers, calling the method setup_controller_for_warden in my test AND doing request.env["devise.mapping"] = Devise.mappings[:user]. Like so:
require 'test_helper'
class SessionsControllerTest < ActionController::TestCase
include Devise::TestHelpers
test "should reject invalid captcha" do
setup_controller_for_warden
request.env["devise.mapping"] = Devise.mappings[:user]
get :new
assert_response :success
end
end
不确定你的双渲染问题,但你确定你应该调用post:create then render?我不知道rspec应该如何工作。
Not sure about your double render problem though, are you sure your supposed to call post :create then render? i'm not sure how rspec is supposed to work.
这篇关于自定义设计会话控制器的RSpec测试失败AbstractController :: ActionNotFound的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!