неопределенный метод get для # <RSpec :: Core :: ExampleGroup :: Nested_1: 0x00000106db51f8> - PullRequest
71 голосов
/ 09 июня 2011

Кто-нибудь знает, как это обойти? На 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/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/version.rb:4: warning: already initialized constant STRING
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/metadata.rb:48: warning: already initialized constant RESERVED_KEYS
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/pending.rb:6: warning: already initialized constant DEFAULT_MESSAGE
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:6: warning: already initialized constant PROC_HEX_NUMBER
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:7: warning: already initialized constant PROJECT_DIR
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/configuration.rb:43: warning: already initialized constant CONDITIONAL_FILTERS
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/configuration.rb:48: warning: already initialized constant DEFAULT_BACKTRACE_PATTERNS
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/runner.rb:13: warning: already initialized constant AT_EXIT_HOOK_BACKTRACE_LINE
/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core.rb:35: warning: already initialized constant SharedContext
Run filtered excluding {:if=>#<Proc:/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:43>, :unless=>#<Proc:/Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/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)>'

Ответы [ 11 ]

133 голосов
/ 09 июня 2011

RSpec не знает, что ваша спецификация является спецификацией контроллера, поэтому ваши примеры не имеют доступа к методу 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
25 голосов
/ 20 февраля 2013

Если вы вообще используете 'spec / features', вам может понадобиться добавить следующее в ваш 'spec_helper.rb'

config.include RSpec::Rails::RequestExampleGroup, type: :feature
24 голосов
/ 14 июня 2014

В Rspec 3.x тип спецификации не выводится автоматически из местоположения файла, и вы должны установить его вручную, добавив его в spec_helper.rb

RSpec.configure do |config|
  config.infer_spec_type_from_file_location!
end

Обновление Rspec

14 голосов
/ 28 июля 2014

Для других, изучающих это. Я пытался отследить ошибку undefined method 'get'. Моя проблема заключалась в том, что у меня было get в describe block, чтобы убедиться, что ваш get находится в it block.

14 голосов
/ 14 декабря 2012

Мне удалось исправить эту проблему в моем приложении, добавив require 'rspec/rails' в мой файл spec_helper.

5 голосов
/ 25 мая 2015

Решено путем замены строки
describe PagesController do на RSpec.describe PagesController, :type => :controller do
в файле _spec.rb в папке spec.
Также для предотвращения предупреждения об устаревании используйте вместо этого expect(response).to be_successиз response should be_success.
PS: не нужно было добавлять require "rails_helper".

2 голосов
/ 28 января 2014

Я получил эту ошибку, когда забыл добавить require 'spec_helper' в начало моего спецификации или --require spec_helper в мой файл .rspec.

1 голос
/ 08 января 2019

Если вы использовали rspec для создания файла .rspec, вам следует изменить содержимое с:

--require spec_helper

на:

--require rails_helper
1 голос
/ 29 января 2016

Альтернативой является указание type: :request для вашей спецификации.Например:

RSpec.describe "Widget management", :type => :request do

  it "creates a Widget and redirects to the Widget's 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.

0 голосов
/ 02 декабря 2017

это может произойти при следующих условиях:

  1. ваша спецификация не имеет :type => :controller [type: :controller в более новом Ruby]

  2. ваша спецификация не находится в папке контроллеров, или вы не установили config.infer_spec_type_from_file_location!

Для вашей спецификации должны быть установлены # 1 или # 2.Также это может произойти и при следующих условиях:

вы написали спецификацию, используя старый стиль require 'spec_helper' вместо более нового require 'rails_helper'.Вы заметите, что rails_helper теперь включает spec_helper (чтобы сгенерировать оба, см. Rspec шаги установки )

перекрестная ссылка GH проблема https://github.com/rails/rails-controller-testing/issues/36

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