ruby RSpec方法编号错误:“未定义主对象的'describe'方法”

yxyvkwin  于 2022-12-18  发布在  Ruby
关注(0)|答案(5)|浏览(147)

我正在学习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)

未在线获得任何有用的答案。如何解决此问题?

dsekswqp

dsekswqp1#

除了将describe作为RSpec.describe的前缀,您还可以添加

config.expose_dsl_globally = true

到您的spec_helper.rb

mkshixfv

mkshixfv2#

解决方案

调用RSpec.describe,而不仅仅是describe

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

RSpec.describe Furlong do
end

它成功的原因

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

fnvucqvd

fnvucqvd3#

您将RSpec作为前缀describe,例如RSpec.describe,因为听起来您使用的是禁用猴子修补的RSpec的现代版本。

xu3bshqb

xu3bshqb4#

我同意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!

您可以注解掉最后一行。
但是,推荐的方法是不使用monkey修补,而使用RSpec.describe

6jjcrrmo

6jjcrrmo5#

如果有人碰巧像我一样在几分钟内出现类似的大脑昏迷,并且用途:

ruby spec/yourspec.rb

代替

rspec spec/yourspec.rb

并完全震惊,为什么这确实工作了一分钟前,而不是现在,当什么都没有改变-这正是错误弹出。

相关问题