【发布时间】:2015-08-19 03:02:47
【问题描述】:
我查看了几篇有关此问题的帖子,但似乎找不到解决方法。我目前正在完成 Ruby on Rails 开发课程中的一项作业,我们已经使用 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', 'augusta.king@lovelace.com')
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', 'augusta.king@lovelace.com')
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? 'augusta.king@lovelace.com'
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 spec/address_book__specs.rb models/address_book.rb
-
我已经回复了。