2016-08-02 105 views
1

我最近开始向我的应用程序添加测试,并且遇到了有关控制器测试的一些问题。当我尝试运行任何控制器测试我得到这个错误:RSPEC找不到控制器未初始化的常量

-> bundle exec rspec -c -b spec/controllers/culture_test_controller_spec.rb 
ActiveRecord::SchemaMigration Load (0.6ms) SELECT "schema_migrations".* FROM "schema_migrations" 
/home/rodras/Github/talentank/spec/controllers/culture_test_controller_spec.rb:4:in `<top (required)>': uninitialized constant CultureTestController (NameError) 

奇怪的是,所有的模型测试,似乎是工作的罚款,这就是为什么我认为这个问题是不是在rails_helper.rb也不在spec_helper.rb

我已经检查似乎有同样的问题,如问题:RSpec Cannot find my Controllers Uninitialized Constant但提供的解决方案有没有帮助我

这些都是我的文件。如果有任何其他文件需要您解决问题,请让我知道,并且我会更新问题。

rails_helper.rb

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] ||= 'test' 
require 'spec_helper' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'shoulda/matchers' 
# Add additional requires below this line. Rails is not loaded until this point! 

# Requires supporting ruby files with custom matchers and macros, etc, in 
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are 
# run as spec files by default. This means that files in spec/support that end 
# in _spec.rb will both be required and run as specs, causing the specs to be 
# run twice. It is recommended that you do not name files matching this glob to 
# end with _spec.rb. You can configure this pattern with the --pattern 
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. 
# 
# The following line is provided for convenience purposes. It has the downside 
# of increasing the boot-up time by auto-requiring all files in the support 
# directory. Alternatively, in the individual `*_spec.rb` files, manually 
# require only the support files necessary. 
# 
# Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 

# Checks for pending migrations before tests are run. 
# If you are not using ActiveRecord, you can remove this line. 
ActiveRecord::Migration.maintain_test_schema! 

RSpec.configure do |config| 
    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 
    config.include FactoryGirl::Syntax::Methods 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 

    # RSpec Rails can automatically mix in different behaviours to your tests 
    # based on their file location, for example enabling you to call `get` and 
    # `post` in specs under `spec/controllers`. 
    # 
    # You can disable this behaviour by removing the line below, and instead 
    # explicitly tag your specs with their type, e.g.: 
    # 
    #  RSpec.describe UsersController, :type => :controller do 
    #  # ... 
    #  end 
    # 
    # The different available types are documented in the features, such as in 
    # https://relishapp.com/rspec/rspec-rails/docs 
    config.infer_spec_type_from_file_location! 
end 
Shoulda::Matchers.configure do |config| 
    config.integrate do |with| 
    with.test_framework :rspec 
    with.library :rails 
    end 
end 

spec_helper.rb

require File.expand_path("../../config/environment", __FILE__) 
# This file was generated by the `rails generate rspec:install` command. Conventionally, all 
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. 
# The generated `.rspec` file contains `--require spec_helper` which will cause this 
# file to always be loaded, without a need to explicitly require it in any files. 
# 
# Given that it is always loaded, you are encouraged to keep this file as 
# light-weight as possible. Requiring heavyweight dependencies from this file 
# will add to the boot time of your test suite on EVERY test run, even for an 
# individual file that may not need all of that loaded. Instead, consider making 
# a separate helper file that requires the additional dependencies and performs 
# the additional setup, and require it from the spec files that actually need it. 
# 
# The `.rspec` file also contains a few flags that are not defaults but that 
# users commonly want. 
# 
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration 
RSpec.configure do |config| 
    # rspec-expectations config goes here. You can use an alternate 
    # assertion/expectation library such as wrong or the stdlib/minitest 
    # assertions if you prefer. 
    config.expect_with :rspec do |expectations| 
    # This option will default to `true` in RSpec 4. It makes the `description` 
    # and `failure_message` of custom matchers include text for helper methods 
    # defined using `chain`, e.g.: 
    # be_bigger_than(2).and_smaller_than(4).description 
    # # => "be bigger than 2 and smaller than 4" 
    # ...rather than: 
    # # => "be bigger than 2" 
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true 
    end 

    # rspec-mocks config goes here. You can use an alternate test double 
    # library (such as bogus or mocha) by changing the `mock_with` option here. 
    config.mock_with :rspec do |mocks| 
    # Prevents you from mocking or stubbing a method that does not exist on 
    # a real object. This is generally recommended, and will default to 
    # `true` in RSpec 4. 
    mocks.verify_partial_doubles = true 
    end 

    # For using same seed as development environment 
    config.before(:all) do 
    #load Rails.root + "db/seeds.rb" 
    Rails.application.load_seed # loading seeds 
    end 

# The settings below are suggested to provide a good initial experience 
# with RSpec, but feel free to customize to your heart's content. 
begin 
    # These two settings work together to allow you to limit a spec run 
    # to individual examples or groups you care about by tagging them with 
    # `:focus` metadata. When nothing is tagged with `:focus`, all examples 
    # get run. 
    config.filter_run :focus 
    config.run_all_when_everything_filtered = true 

    # Limits the available syntax to the non-monkey patched syntax that is recommended. 
    # For more details, see: 
    # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax 
    # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ 
    # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching 
    config.disable_monkey_patching! 

    # Many RSpec users commonly either run the entire suite or an individual 
    # file, and it's useful to allow more verbose output when running an 
    # individual spec file. 
    if config.files_to_run.one? 
    # Use the documentation formatter for detailed output, 
    # unless a formatter has already been configured 
    # (e.g. via a command-line flag). 
    config.default_formatter = 'doc' 
    end 

    # Print the 10 slowest examples and example groups at the 
    # end of the spec run, to help surface which specs are running 
    # particularly slow. 
    config.profile_examples = 10 

    # Run specs in random order to surface order dependencies. If you find an 
    # order dependency and want to debug it, you can fix the order by providing 
    # the seed, which is printed after each run. 
    #  --seed 1234 
    config.order = :random 

    # Seed global randomization in this process using the `--seed` CLI option. 
    # Setting this allows you to use `--seed` to deterministically reproduce 
    # test failures related to randomization by passing the same `--seed` value 
    # as the one that triggered the failure. 
    Kernel.srand config.seed 
end 
end 

我的一个控制器的测试规格/控制器/ culture_test_controller_spec.rb

require 'rails_helper' 
require 'rspec/its' 

RSpec.describe CultureTestController, type: :controller do 
    describe "GET #index" do 
    it "returns a specific culture test" do 
     culture_test = FactoryGirl(:culture_test) 
     get :index 
     expect(response).to render_text(:culture_test) 
    end 
    it "returns all the culture tests" do 
     culture_test = FactoryGirl(:invalid_culture_test) 
     get :index 
     expect(response).to render_text(CultureTest.all) 
    end 

    end 

end 

相应的控制器:culture_test_controller.rb

module Api 
    class CultureTestController < ApplicationController 
     before_action :find_culture_test, only: [:show, :edit, :update, :registration, :results] 

    def index 
     if(params[:company_id] != nil && params[:title] != nil) 
      respond_to do |format| 
       format.json{ 
        render text: CultureTest.where(:company_id => params[:company_id]).where(:title => params[:title]).first.to_json 
       } 
      end 
     else 
      respond_to do |format| 
       format.json{ 
        render text: CultureTest.all.to_json 
       } 
      end 
     end 
    end 

的Gemfile:

source 'https://rubygems.org' 

ruby "2.1.3" 

### APP DEFAULT GEMS 
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' 
gem 'rails', '4.2.0' 
# Use SCSS for stylesheets 
gem 'sass-rails', '~> 5.0' 
# Use Uglifier as compressor for JavaScript assets 
gem 'uglifier', '>= 1.3.0' 
# Use CoffeeScript for .coffee assets and views 
gem 'coffee-rails', '~> 4.1.0' 
gem 'sprockets', '2.12.3' 
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks 
# Removed so that we can use AngularJS 
# gem 'turbolinks' 
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder 
gem 'jbuilder', '~> 2.0' 
gem 'responders' 
# bundle exec rake doc:rails generates the API under doc/api. 
gem 'sdoc', '~> 0.4.0', group: :doc 
# Bower package manager 
gem 'bower-rails' 
gem 'rails-html-sanitizer' 


### FRONT-END STUFF 
# Use jquery as the JavaScript library 
gem 'jquery-rails' 
# Using the jQuery UI framework 
gem 'jquery-ui-rails' 
# And some nice jQuery gems 
gem 'jquery-validation-rails' 
gem 'jquerymobile-rails' 
# Talentank's front-end devs prefer haml over erb 
gem 'haml' 
# Zurb's Foundation as HTML+CSS framework 
gem 'foundation-rails' 
# We want to use the Foundation icons too 
gem 'foundation-icons-sass-rails' 
# Font Awesome: awesome icons 
gem "font-awesome-rails" 
# Animate.css as a Rails gem (simple CSS animations) 
gem 'animate-rails' 
# EU cookies law 
gem 'cookies_eu' 
# Angular templates for simple Angular templates as asset referencing 
gem 'angular-rails-templates' 
# Gem for authenticate with protection token 
gem 'angular_rails_csrf' 


### BACK-END STUFF 
# let's use PostgreSQL. Yay! 
gem 'pg' 
# let's get rid of that webrick crap 
gem "puma" 
# Devise as user authenticator and session management 
gem 'devise' 
# gem 'devise_token_auth' # Token based authentication for Rails JSON APIs 
# gem 'omniauth' # required for devise_token_auth 
# Paperclip allows us to attach files (such as logos in company profiles) 
gem 'paperclip' 
# i18n for internationalization (app translation) 
gem 'i18n' 
gem 'i18n-js' 
# Globalize is used to translate the database 
gem 'globalize' 
# Simple_form for, guess what, simple forms 
gem 'simple_form' 
# Allows country selection in simple form 
gem 'country_select' 
# mail_form for simple, yet nice contact forms 
gem 'mail_form' 


### DEVOPS STUFF (anything related to the logistics of deploying the app) 
# rails_12factor has to do with Heroku and devops 
gem 'rails_12factor' 
# yaml_db: db migrations to heroku 
gem 'yaml_db' 

# Backend for working in background 
gem 'delayed_job_active_record' 

# To run jobs 
gem 'daemons' 


group :development, :test do 
    # Call 'byebug' anywhere in the code to stop execution and get a debugger console 
    gem 'byebug' 

    # Access an IRB console on exception pages or by using <%= console %> in views 
    gem 'web-console', '~> 2.0' 

    # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring 
    gem 'spring' 

    gem 'rspec-rails' 
    gem 'rspec-its' 
    gem 'shoulda-matchers', require: false# Helps with the test models with belongs_to and has_many 
    # Fuubar formats RSpec output in a nice way 
    # gem 'fuubar' 
    #FactoryGirl is a library for setting up Ruby objects as test data. 
    gem 'factory_girl_rails' 
    #Faker for creating fake dummy fields 
    gem 'faker' 

    gem 'mailcatcher' 

end 

回答

0

我认为这个问题可能会在这里

规格/控制器/文化前进re_test_controller_spec.rb

RSpec.describe CultureTestController, type: :controller do 

它应该是:

RSpec.describe Api::CultureTestController, type: :controller do 
相关问题