Undefined метод `get 'для # <RSpec:: Core:: ExampleGroup:: Nested_1: 0x00000106db51f8>
Кто-нибудь знает, как обойти это? На OSX, пытаясь заставить RSpec работать с Rails 3.0.7. Полная информация:
https://gist.github.com/1017044
it "renders buttons_widgets partial" do
get :buttons_widgets
response.should render_template("buttons_widgets")
end
→ rspec tools_model_spec.rb
/Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/version.rb:4: warning: already initialized constant STRING
/Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/metadata.rb:48: warning: already initialized constant RESERVED_KEYS
/Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/pending.rb:6: warning: already initialized constant DEFAULT_MESSAGE
/Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:6: warning: already initialized constant PROC_HEX_NUMBER
/Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:7: warning: already initialized constant PROJECT_DIR
/Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/configuration.rb:43: warning: already initialized constant CONDITIONAL_FILTERS
/Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/configuration.rb:48: warning: already initialized constant DEFAULT_BACKTRACE_PATTERNS
/Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/runner.rb:13: warning: already initialized constant AT_EXIT_HOOK_BACKTRACE_LINE
/Users/mm/.rvm/gems/[email protected]/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core.rb:35: warning: already initialized constant SharedContext
Run filtered excluding {:if=>#<Proc:/Users/mm/.rvm/gems/[email protected]/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:43>, :unless=>#<Proc:/Users/mm/.rvm/gems/[email protected]/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:44>}
F
Failures:
1) ToolsController renders buttons_widgets partial
Failure/Error: get :buttons_widgets
NoMethodError:
undefined method `get' for #<RSpec::Core::ExampleGroup::Nested_1:0x00000106db51f8>
# ./tools_model_spec.rb:7:in `block (2 levels) in <top (required)>'
Ответы
Ответ 1
RSpec не знает, что ваш spec является спецификацией контроллера, поэтому ваши примеры не имеют доступа к методу get
.
RSpec 2.x предполагает, что все в каталоге контроллеров является спецификацией контроллера.
Это было изменено в RSpec 3:
По умолчанию вывод типа файла отключен
Ранее мы автоматически определяли тип спецификации из местоположения файла, это было неожиданным поведением для новых пользователей и нежелательным для некоторых пользователей-ветеранов, поэтому с RSpec 3 и далее это поведение должно быть явно разрешено с помощью:
RSpec.configure do |config|
config.infer_spec_type_from_file_location!
end
https://www.relishapp.com/rspec/rspec-rails/docs/upgrade#file-type-inference-disabled
В rspec-rails README:
Спецификации контроллера по умолчанию остаются в spec/controllers folder
. Пометка любого контекста с метаданными :type => :controller
рассматривает его как параметры контроллера.
Пример настройки метаданных контекста контроллера для RSpec:
describe ToolsController, :type => :controller do
# ...
end
Ответ 2
Если вы вообще используете "spec/features", вам может потребоваться добавить следующее к вашему spec_helper.rb
config.include RSpec::Rails::RequestExampleGroup, type: :feature
Ответ 3
В Rspec 3.x тип спецификации автоматически не выводится из местоположения файла, и вы должны вручную установить его, добавив это в spec_helper.rb
RSpec.configure do |config|
config.infer_spec_type_from_file_location!
end
Обновление Rspec
Ответ 4
Для других, изучающих это. Я пытался отслеживать ошибку undefined method 'get'
. Моя проблема заключалась в том, что у меня был get
в describe block
, убедитесь, что ваш get
находится в it block
.
Ответ 5
Я смог исправить эту проблему в своем приложении, добавив require 'rspec/rails'
в свой файл spec_helper.
Ответ 6
Решается путем замены строки
describe PagesController do
с
RSpec.describe PagesController, :type => :controller do
в файле _spec.rb в папке спецификаций.
Также для предотвращения предупреждения об устаревании используйте expect(response).to be_success
вместо response should be_success
.
PS: Не нужно было добавлять require "rails_helper"
.
Ответ 7
Я получил эту ошибку, когда забыл добавить require 'spec_helper'
в начало моего файла spec или --require spec_helper
в файл .rspec.
Ответ 8
Альтернативой является указание type: :request
для вашей спецификации. Например:
RSpec.describe "Widget management", :type => :request do
it "creates a Widget and redirects to the Widget page" do
get "/widgets/new"
expect(response).to render_template(:new)
post "/widgets", :widget => {:name => "My Widget"}
expect(response).to redirect_to(assigns(:widget))
follow_redirect!
expect(response).to render_template(:show)
expect(response.body).to include("Widget was successfully created.")
end
end
Пример, взятый здесь https://www.relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec.
Ответ 9
У меня была эта проблема, когда я добавил
gem 'rspec'
для моего Gemfile в проекте rails. Это должно быть
gem 'rspec'
gem 'rspec-rails'
(или просто rspec-rails). После того, как
bundle install
заново создайте каталог спецификаций с помощью
rspec --init
и поместите файл xxx_spec.rb в соответствующий каталог (не будет работать, если он находится в каталоге спецификаций). Ошибка начинающих, но, возможно, это помогает кому-то;) Вот ссылка, которая помогла мне:
https://www.relishapp.com/rspec/rspec-rails/docs/gettingstarted
Ответ 10
это может произойти при следующих условиях:
Для вашей спецификации нужно настроить либо # 1, либо # 2. Кроме того, это может произойти и при этом условии:
- вы написали спецификацию с использованием старого стиля
require 'spec_helper'
вместо использования более новой require 'rails_helper'
. Вы заметите, что rails_helper
теперь включает в себя spec_helper
(для генерации обоих см. шаги установки Rspec)
перекрестная ссылка на проблему GH https://github.com/rails/rails-controller-testing/issues/36