臭名昭着的AbstractController :: ActionNotFound – Devise + Rails

所以我已经阅读了如何解决这个问题:

自定义设计会话控制器的RSpec测试因AbstractController :: ActionNotFound失败

http://lostincode.net/blog/testing-devise-controllers

但我在哪个文件下添加这些更改是我的问题:

在我的rspec文件夹下

registrations_controller

我试过这个

before :each do request.env['devise.mapping'] = Devise.mappings[:user] end require 'spec_helper' describe RegistrationsController do describe "GET 'edit'" do it "should be successful" do get 'edit' response.should be_success end end end 

哪个不起作用,任何帮助改变特定文件以使这项工作将不胜感激。

编辑

所以我也尝试过 –

https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-(and-rspec)

所以我创建了一个带有spec / support的文件夹,并创建了一个名为controllers_macros.rb的文件

 module ControllerMacros def login_admin before(:each) do @request.env["devise.mapping"] = Devise.mappings[:admin] sign_in Factory.create(:admin) # Using factory girl as an example end end def login_user before(:each) do @request.env["devise.mapping"] = Devise.mappings[:user] user = Factory.create(:user) user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are using the confirmable module sign_in user end end end 

我的registrations_controller现在是这样的:

 require 'spec_helper' describe RegistrationsController do describe "GET 'edit'" do before :each do request.env['devise.mapping'] = Devise.mappings[:user] end it "should be successful" do get 'edit' response.should be_success end end end 

我在rspec中有其他控制器我需要更改每一个吗? 或者我对在何处进行更改感到困惑。

只需要你尝试的第一个版本,但是在第一个描述块中移动before一个块,如下所示:

 require 'spec_helper' describe RegistrationsController do before :each do request.env['devise.mapping'] = Devise.mappings[:user] end describe "GET 'edit'" do it "should be successful" do get 'edit' response.should be_success end end end