未定义的方法`get'for#<RSpec :: Core :: ExampleGroup :: Nested_1:0x00000106db51f8>

99m*_*les 73 rspec ruby-on-rails

有谁知道怎么解决这个问题?在OSX上,尝试使用Rails 3.0.7运行RSpec.详情请访问: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)>'
Run Code Online (Sandbox Code Playgroud)

Rob*_*vis 133

RSpec不知道您的规范是控制器规范,因此您的示例无法访问get方法.

RSpec 2.x假定控制器目录中的所有内容都是控制器规范.

这在RSpec 3中有所改变:

默认情况下禁用文件类型推断

以前我们自动从文件位置推断出spec类型,这对于新用户来说是一个令人惊讶的行为,对于一些资深用户来说是不可取的,所以从RSpec 3开始,必须明确选择这种行为:

RSpec.configure do |config|
  config.infer_spec_type_from_file_location!
end
Run Code Online (Sandbox Code Playgroud)

https://www.relishapp.com/rspec/rspec-rails/docs/upgrade#file-type-in​​ference-disabled

rspec-rails自述文件中:

控制器规格默认驻留在spec/controllers folder.使用元数据标记任何上下文:type => :controller将其作为控制器规范的示例处理.

为RSpec设置控制器上下文元数据的示例:

describe ToolsController, :type => :controller do
    # ...
end
Run Code Online (Sandbox Code Playgroud)


小智 25

如果你正在使用'spec/features',你可能需要在'spec_helper.rb'中添加以下内容

config.include RSpec::Rails::RequestExampleGroup, type: :feature
Run Code Online (Sandbox Code Playgroud)


小智 25

在Rspec 3.x中,不会从文件位置自动推断规范类型,您必须手动设置它,将其添加到spec_helper.rb

RSpec.configure do |config|
  config.infer_spec_type_from_file_location!
end
Run Code Online (Sandbox Code Playgroud)

Rspec升级

  • 正如Joost所说 - 确保你有'require'rail_helper'` - 而不是'require'spec_helper'` (3认同)
  • 如果您使用RSpec 3中的rails helper,则将根据文件位置推断规格类型*。因此,只要您在每个规格文件的顶部都需要“ rails_helper”,就无需更改此设置。 (2认同)

Pet*_*own 14

通过添加require 'rspec/rails'到我的spec_helper文件,我能够在我的应用中修复此问题.


sup*_*000 14

对于其他人来说.我试图追查undefined method 'get'错误.我的问题是,我有get一个describe block确保你get是在it block.

  • 当我读到这篇文章时,我很刻苦,并解决了我的问题:/ (4认同)

小智 5

通过替换线解决
describe PagesController doRSpec.describe PagesController, :type => :controller do
_spec.rb在规范文件夹文件.
另外要防止弃用警告使用expect(response).to be_success而不是response should be_success.
PS:没必要添加require "rails_helper".