【问题标题】:Infamous AbstractController::ActionNotFound - Devise + Rails臭名昭著的 AbstractController::ActionNotFound - 设计 + Rails
【发布时间】:2011-11-12 04:16:04
【问题描述】:

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

RSpec Test of Custom Devise Session Controller Fails with 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 中有其他控制器,我需要更改每个控制器吗?或者我对在哪里进行更改感到困惑。

【问题讨论】:

    标签: ruby-on-rails rspec controller devise


    【解决方案1】:

    只需使用您尝试过的第一个版本,但将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
    

    【讨论】:

    • 谢谢,似乎已经解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2015-03-21
    • 2014-08-19
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 2012-01-09
    • 2011-04-14
    相关资源
    最近更新 更多