ruby-on-rails - Rspec 找不到 ActiveAdmin Controller

标签 ruby-on-rails ruby rspec activeadmin

我正在尝试使用 rspec 在 ActiveAdmin 中测试自定义成员操作。

app/admin/inactive_user.rb

ActiveAdmin.register InactiveUser do
  member_action :activate, method: :put do
    user = User.new(email: resource.email, password: generate_activation_code)
    resource.destroy if user.save
    send_activation_email user
    redirect_to admin_inactive_users_path, notice: "#{user.email} was activated"
  end
end

app/spec/admin/inactive_user_controller_spec.rb

require 'spec_helper'

describe Admin::InactiveUserController do
  render_views

  before do
    @admin = FactoryGirl.create(:admin, confirmed_at: Date.yesterday)
    authenticate_user @admin
  end

  describe "PUT #activate" do
    before(:each) do
      @inactive_user = FactoryGirl.create(:inactive_user)
      put :activate, id: @inactive_user.id
    end

    it "should redirect to inactive users index" do
      expect(response).to redirect_to(admin_inactive_users_path)
    end
  end
end

我收到此错误:

NameError:
  uninitialized constant Admin
# ./spec/admin/inactive_user_controller_spec.rb:3:in `<top (required)>'

我已经尝试过this没有任何运气。

另外,如果您知道任何使用 rspec 对此类事情进行测试的项目,那就太好了,该文档没有说太多。

更新: 现在它正在测试后运行 active_admin 初始化程序: 加载时发生错误

NameError:
  uninitialized constant Admin
# ./spec/admin/inactive_user_controller_spec.rb:3:in `<top (required)>'

[3, 12] in /Users/lucia/Documents/frogs-api-remote/config/initializers/active_admin.rb
    3:   # == Site Title
    4:   #
    5:   # Set the title that is displayed on the main layout
    6:   # for each of the active admin pages.
    7:   #
=>  8:   config.site_title = "Frogs App"
    9:
   10:   # Set the link url for the title. For example, to take
   11:   # users to your main site. Defaults to no link.
   12:   #

最佳答案

尝试要求 rails_helper 而不是 spec_helper,请参阅 How is spec/rails_helper.rb different from spec/spec_helper.rb? Do I need it?

rails_helper 应该需要 File.expand_path("../../config/environment", __FILE__) 然后 config/environment 应该调用 Rails.application.initialize! 并且应该在测试开始之前加载 initalizers/active_admin.rb 并定义 Admin::InactiveUserController

运行initializers/active_admin后,您应该能够检查ActiveAdmin.application.namespaces.map(&:name),在您的情况下应该是[:管理员]。如果是这样,请检查 ActiveAdmin.application.namespaces[:admin].resources.map(&:c‌​ontroller) ,它应该为您提供已创建的 Controller 列表。

关于ruby-on-rails - Rspec 找不到 ActiveAdmin Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46593603/

相关文章:

ruby-on-rails - 最后一条记录的 Rails find_by 选项语法

ruby - 如何创建沙盒 RSpec 环境?

ruby-on-rails - 如何摆脱 let using before

rspec - 使用 RSpec 构建 CSV 数据驱动测试的基本简单方法?

ruby-on-rails - 无法从 Rails 请求 redis 但可以在控制台上运行

ruby-on-rails - Ruby/Rails 初学者可以将 Ruby 1.9 与 Rails 一起使用吗?

ruby-on-rails - sprockets 重复文件命名

ruby - Capistrano错误: could not connect to ssh-agent

ruby - 有没有一种简单的方法可以使用 ruby​​ gem 获得 Twitter 提及?

ruby-on-rails - 集成测试应该包含多少内容?副作用在哪里测试?