#<RSpec::Core::ExampleGroup::Nested_1:0x00000106db51f8>的未定义方法`get' [英] undefined method `get' for #<RSpec::Core::ExampleGroup::Nested_1:0x00000106db51f8>
问题描述
有人知道如何解决这个问题吗?在 OSX 上,尝试让 RSpec 与 Rails 3.0.7 一起运行.完整详情请访问:https://gist.github.com/1017044
Anyone know how to get around this? On OSX, trying to get RSpec running with Rails 3.0.7. Full details at: 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)>'
推荐答案
RSpec 不知道您的规范是控制器规范,因此您的示例无法访问 get
方法.
RSpec doesn't know that your spec is a controller spec, so your examples don't have access to a get
method.
RSpec 2.x 假定控制器目录中的所有内容都是控制器规范.
RSpec 2.x assumes that everything in the controllers directory is a controller spec.
这在 RSpec 3 中有所改变:
This was changed in RSpec 3:
以前我们会自动从文件位置推断规范类型,这对新用户来说是一种令人惊讶的行为,对于一些老用户来说是不受欢迎的,因此从 RSpec 3 开始,必须明确选择这种行为:
File-type inference disabled by default
Previously we automatically inferred spec type from a file location, this was a surprising behaviour for new users and undesirable for some veteran users so from RSpec 3 onwards this behaviour must be explicitly opted into with:
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 自述文件中:
控制器规范默认位于 spec/controllers 文件夹
.使用元数据 :type => 标记任何上下文:controller
将其示例视为控制器规范.
Controller specs default to residing in the
spec/controllers folder
. Tagging any context with the metadata:type => :controller
treats it's examples as controller specs.
为 RSpec 设置控制器上下文元数据的示例:
An example of setting the controller context metadata for RSpec:
describe ToolsController, :type => :controller do
# ...
end
这篇关于#<RSpec::Core::ExampleGroup::Nested_1:0x00000106db51f8>的未定义方法`get'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!