ruby - `<main>' : uninitialized constant RSpec (NameError) using when testing Ruby files

标签 ruby rspec tdd bdd

我查看了有关此问题的几篇文章,但似乎找不到解决方案。我目前正在完成 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/

相关文章:

ruby-on-rails - 访问* other *工厂中的factory_girl工厂

tdd - 从项目管理的角度来看,TDD 有什么好处?

c - 如何在 Ruby 和 c 之间共享数据?

javascript - Ember js 和 Rails 4 CSRF

ruby-on-rails - 是否可以添加 "somewhere"一个 `before(:each)` Hook ,以便所有规范文件都可以运行它?

ruby-on-rails - 没有方法错误 - 从 ruby​​stutorial.org 保存

html - 如何用rspec测试html属性?

ruby-on-rails - do..end 与 Ruby 中 block 的花括号

ruby - 如何压缩数组中的空元素

java - 黑莓开发 : Architecture Best Practices and Patterns