RSpec NoMethodError:“主对象的未定义方法‘描述’”

Posted

技术标签:

【中文标题】RSpec NoMethodError:“主对象的未定义方法‘描述’”【英文标题】:RSpec NoMethodError: "undefined method `describe' for main Object" 【发布时间】:2015-01-15 05:45:45 【问题描述】:

我正在尝试学习 Rspec。我在eclipse中的ruby项目如下——

代码-

require 'rspec'
require './RubyOffRailsTuts/classes/furlong'

describe Furlong do
end

错误-

/RubyOffRailsTuts/specs/furlong_spec.rb:6:in `<main>': undefined 
method `describe' for main:Object (NoMethodError)

在网上没有得到任何有用的答案。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您在describe 前加上RSpec,例如。 RSpec.describe 因为听起来您正在使用禁用猴子补丁的现代版本的 RSpec。

【讨论】:

【参考方案2】:

问题:

您可以从错误消息“undefined method `describe' for main Object”中看出,根本问题是您试图在基本对象 main 上调用 describe,它没有describe 方法。

解决办法:

请致电RSpec.describe 而不仅仅是describe

require 'rspec'
require './RubyOffRailsTuts/classes/furlong'

RSpec.describe Furlong do
end

【讨论】:

当我删除 'require rspec' 时问题消失了,在 cd-ing 进入 ruby​​ 2 bin 文件夹后做了gem install rspec,将这些 rspec 库添加到我的构建路径并运行规范作为测试而不是脚本。我前段时间删除了上面的项目,但我会尝试重新创建。感谢您的回答。 如果您有 config.disable_monkey_patching,方法 2 不起作用!在 rspec_helper 中。请参阅下面的@sevenseacat 答案。【参考方案3】:

替代将describe 前缀为RSpec.describe,您可以添加

config.expose_dsl_globally = true

致您的spec_helper.rb

【讨论】:

只有在config.disable_monkey_patching!之后才有效,如果该行没有注释【参考方案4】:

我同意 Sevenseacat 的观点,您可能正在使用禁用猴子补丁的现代版本的 RSpec。

默认情况下,当您执行类似操作时创建 spec_helper.rb 文件时会执行此禁用

$ rails generate rspec:install

spec_helper.rb 中,您会看到如下所示的部分:

# Limits the available syntax to the non-monkey patched syntax that is
# recommended. For more details, see:
#   - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
#   - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
#   - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
config.disable_monkey_patching!

你可以注释掉最后一行。

但是,推荐的方法是不要使用猴子补丁,而是使用RSpec.describe

【讨论】:

【参考方案5】:

如果有人像我不久前一样在几分钟内出现类似的大脑停电并且确实使用:

ruby spec/yourspec.rb 

而不是

rspec spec/yourspec.rb

并且完全惊呆了为什么这在一分钟前确实有效,而现在没有任何改变 - 这正是弹出的错误。

【讨论】:

以上是关于RSpec NoMethodError:“主对象的未定义方法‘描述’”的主要内容,如果未能解决你的问题,请参考以下文章

Rails - RSpec NoMethodError:未定义的方法

为啥 Rspec 找不到 select2 方法?

Rails无法加载shoulda-matchers 3.1.1 gem,undefined方法`allow_value'代表#

Logstash: NoMethodError: 方法 `>=' for nil:NilClass Logstash

NoMethodError:AjaxDatatablesRails:Module 的未定义方法“配置”

Ruby - NoMethodError:未定义的哈希方法