臭名昭著的 AbstractController::ActionNotFound - 设计 +导轨

发布于 2024-12-14 19:46:45 字数 2169 浏览 3 评论 0原文

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

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

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

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

在我的 rspec 文件夹下

注册控制器

我尝试了这个,

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中有其他控制器,我需要更改每一个吗?或者我对在哪里进行更改感到困惑。

So I have read how to solve this problem:

RSpec Test of Custom Devise Session Controller Fails with AbstractController::ActionNotFound

and

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

But under which file do I add these changes is my problem:

Under the rspec folder for my

registrations_controller

I tried this

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

Which didn't work, any help with the specific files to change to make this work would be greatly appreciated.

EDIT

So I also tried -

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

so I made a folder with spec/support and made a file called 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

And my registrations_controller is now this:

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

I have other controllers in rspec do I need to change every single one? Or I'm confused on where to make the changes.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

她说她爱他 2024-12-21 19:46:45

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

Just take the first version you tried, but move the before block inside the first describe block like this:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文