我查看了有关此问题的几篇文章,但似乎找不到解决方案。我目前正在完成 Ruby on Rails 开发类(class)中的一项作业,我们已经使用 RSpec 完成了 TDD/BDD 模块。到目前为止我已经取得了一些成功,但我不知道如何处理这个错误:
<main>': uninitialized constant RSpec (NameError)
我已经逐行检查了我的期望和代码本身,以确保它是正确的。 RSpec 在规范文件中正确大写,我有一个具有相应 end
的类这通常会导致 RSpec 抛出此错误。不过,我仍在学习 RSpec。当错误开始出现时,我正在处理最后一个期望语句。
代码
require_relative "entry.rb"
class AddressBook
attr_accessor :entries
def initialize
@entries = []
end
def add_entry(name, phone, email)
index = 0
@entries.each do |entry|
if name < entry.name
break
end
index += 1
end
@entries.insert(index, Entry.new(name, phone, email))
end
def remove_entry
end
end
RSpec
RSpec.describe AddressBook do
context "attributes" do
it "should respond to entries" do
book = AddressBook.new
expect(book).to respond_to(:entries)
end
it "should initialize entries as an array" do
book = AddressBook.new
expect(book.entries).to be_a(Array)
end
it "should initialize entries as empty" do
book = AddressBook.new
expect(book.entries.size).eql? 0
end
end
context ".add_entry" do
it "adds only one entry to the address book" do
book = AddressBook.new
book.add_entry('Ada Lovelace', '010.012.1815', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7b1a0e1c0e080f1a551012151c3b17140d1e171a181e55181416" rel="noreferrer noopener nofollow">[email protected]</a>')
expect(book.entries.size).eql? 1
end
it "adds the correct information to entries" do
book = AddressBook.new
book.add_entry('Ada Lovelace', '010.012.1815', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5e3f2b392b2d2a3f70353730391e3231283b323f3d3b703d3133" rel="noreferrer noopener nofollow">[email protected]</a>')
new_entry = book.entries[0]
expect(new_entry.name).eql? 'Ada Lovelace'
expect(new_entry.phone_number).eql? '010.012.1815'
expect(new_entry.email).eql? '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fe9f8b998b8d8a9fd095979099be9291889b929f9d9bd09d9193" rel="noreferrer noopener nofollow">[email protected]</a>'
end
end
it "removes only one entry from the address book" do
book = AddressBook.new
expect(book.entries.size).to change.by(1)
end
end
更新
我按照下面所述的答案运行了 rspec spec/address_book_specs.rb 并收到了以下信息:
/Users/jrshafer/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- spec_helper.rb (LoadError)
from /Users/jrshafer/.rvm/rubies/ruby- 2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /Users/jrshafer/bloc/code/address-bloc/spec/address_book_specs.rb:1:in `<top (required)>'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/gems/rspec-core-3.2.3/lib/rspec/core/configuration.rb:1226:in `load'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/gems/rspec-core-3.2.3/lib/rspec/core/configuration.rb:1226:in `block in load_spec_files'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/gems/rspec-core-3.2.3/lib/rspec/core/configuration.rb:1224:in `each'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/gems/rspec-core-3.2.3/lib/rspec/core/configuration.rb:1224:in `load_spec_files'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:97:in `setup'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:85:in `run'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:70:in `run'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/gems/rspec-core-3.2.3/lib/rspec/core/runner.rb:38:in `invoke'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/gems/rspec-core-3.2.3/exe/rspec:4:in `<top (required)>'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/bin/rspec:23:in `load'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/bin/rspec:23:in `<main>'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/bin/ruby_executable_hooks:15:in `eval'
from /Users/jrshafer/.rvm/gems/ruby-2.2.1/bin/ruby_executable_hooks:15:in `<main>'
我发誓我以前运行这样的测试绝对没有问题。我已经重新开始了这个项目,因为我还没有深入研究它,而且我遇到了同样的问题。
最佳答案
如果您是通过网络搜索来到这里的,请尝试此操作。将这些条目中的第一个和两个条目插入到您的/.rspec 文件中:
--require spec_helper.rb
--require rails_helper.rb
也许它在调试您的问题时摇出额外的信息。
关于ruby - `<main>' : uninitialized constant RSpec (NameError) using when testing Ruby files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644894/