首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试AccountsController < AbstractedResourcesController

如何测试AccountsController < AbstractedResourcesController
EN

Stack Overflow用户
提问于 2015-05-26 12:00:30
回答 1查看 136关注 0票数 0

我的应用程序有一个默认控制器被抽象成一个创业板(创业板‘抽象’),我的所有控制器都是从这个抽象控制器继承的。

代码语言:javascript
复制
# Gemfile
gem 'abstracted', path: '../../gems/abstracted'

# app/controllers/accounts_controller.rb
class AccountsController < AbstractResourcesController
end

现在,当我为其中一个控制器编写控制器(Mini)测试时,如下所示:

代码语言:javascript
复制
require "test_helper"

describe AccountsController do
...

我从提示符中得到了一个错误:rake test

代码语言:javascript
复制
NameError: uninitialized constant AbstractResourcesController
/path_to_rails/projects/cas_server/app/controllers/accounts_controller.rb:1:in `<top (required)>'

我的test/test_helper.rb如下所示:

代码语言:javascript
复制
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)

require 'minitest/autorun'
require 'action_controller/test_case'
require 'capybara/rails'
require 'rails/test_help'
require 'minitest-rails'
require 'minitest/pride'
# require 'miniskirt'
# require 'factories'
# require 'mocha'






class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end

class ActionController::TestCase
  include Devise::TestHelpers
end

class MiniTest::Unit::TestCase
  # include MiniTest::ActiveRecordAssertions

  # DatabaseCleaner.strategy = :transaction
  #
  # def setup
  #   DatabaseCleaner.start
  # end
  #
  # def teardown
  #   DatabaseCleaner.clean
  # end

end

class MiniTest::Spec
  include ActiveSupport::Testing::SetupAndTeardown

  # alias :method_name :__name__ if defined? :__name__

  def build_message(*args)
    args[1].gsub(/\?/, '%s') % args[2..-1]
  end
end


class ControllerSpec < MiniTest::Spec

  include ActionController::TestCase::Behavior
  include Devise::TestHelpers
  include Rails.application.routes.url_helpers

  # Rails 3.2 determines the controller class by matching class names that end in Test
  # This overides the #determine_default_controller_class method to allow you use Controller
  # class names in your describe argument
  # cf: https://github.com/rawongithub/minitest-rails/blob/gemspec/lib/minitest/rails/controller.rb
  def self.determine_default_controller_class(name)
    if name.match(/.*(?:^|::)(\w+Controller)/)
      $1.safe_constantize
    else
      super(name)
    end
  end

  before do
    @controller = self.class.name.match(/((.*)Controller)/)[1].constantize.new
    @routes = Rails.application.routes
  end

  subject do
    @controller
  end

end

# Functional tests = describe ***Controller
MiniTest::Spec.register_spec_type( /Controller$/, ControllerSpec )
EN

回答 1

Stack Overflow用户

发布于 2015-05-26 12:02:10

describe AccountsController do之前将其添加到控制器规范文件中,

代码语言:javascript
复制
module AbstractResourcesController

class Base
    def self.protect_from_forgery; end
  end
end
require 'abstract_resources_controller'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30457978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档