Rails rspec неопределенная локальная переменная или метод render_views - PullRequest
5 голосов
/ 06 ноября 2011

При запуске rspec я получаю:

C: /www/kill/spec/games_controller_spec.rb: 4: в block in <top (required)>': undefined local variable or method render_views '

games_controller_spec.rb

require 'spec_helper'

describe GamesController, "creating a new game" do
  render_views
  fixtures :games

  it "should redirect to index with a notice on successful save" do
    Game.any_instance.stubs(:valid?).returns(true)
    post 'create'
    assigns[:game].should_not be_new_record
    flash[:notice].should_not be_nil
    response.should redirect_to(menu_items_path)
  end
end

spec_helper.rb

# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'

# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  # == Mock Framework
  #
  # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
  #
  config.mock_with :mocha
  # config.mock_with :flexmock
  # config.mock_with :rr
  #config.mock_with :rspec

  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  config.fixture_path = "#{::Rails.root}/spec/fixtures"

  # 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

  # If true, the base class of anonymous controllers will be inferred
  # automatically. This will be the default behavior in future versions of
  # rspec-rails.
  config.infer_base_class_for_anonymous_controllers = false
end

драгоценные камни:

C: /Ruby192/lib/ruby/gems/1.9.1/gems/rspec-2.7.0

C: /Ruby192/lib/ruby/gems/1.9.1/gems/mocha-0.10.0

Ответы [ 5 ]

15 голосов
/ 10 января 2013

Спецификации вашего контроллера должны быть в папке spec/controllers/. Однако по какой-то причине вы можете захотеть иметь некоторые другие файлы, которые запускают спецификации контроллера (например, я проверяю проверку разметки в отдельном тестовом файле).

Вы можете сделать это:

describe GamesController, "creating a new game", :type => :controller do

И это должно сработать!

3 голосов
/ 14 июня 2016

В моем случае мой тест уже был в spec/controllers/.Мне нужно было добавить config.infer_spec_type_from_file_location! внутри цикла RSpec.configure do |config| в spec_helper.rb.Я обновил rspec с 2.x до 3.x, не осознавая этого, и эта конфигурация необходима для тестирования контроллера с 3.x.

2 голосов
/ 06 ноября 2011

Вы должны поместить спецификации вашего контроллера в каталог spec/controllers.RSpec включает эти методы, основанные на этом, AFAIK.

0 голосов
/ 09 июля 2014

эта проблема может быть вызвана вашей версией Gem rspec-rails.понизить его до 2.x решил мою проблему:

# edit your Gemfile
gem "rspec-rails", "2.14.2"
0 голосов
/ 05 декабря 2013

Если вы тестируете представления, для этого у RSpec есть каталог spec/requests, по умолчанию представления будут отображаться.( См. Документ )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...