Rspec有(n).items未定义的方法

我正在尝试遵循code.tuts的指南,我一直收到错误。

这是我的图书馆规范:

require 'spec_helper' describe Library do before :all do lib_arr = [ Book.new("JavaScript: The Good Parts", "Douglas Crockford", :development), Book.new("Dont Make me Think", "Steve Krug", :usability), ] File.open "books.yml", "w" do |f| f.write YAML::dump lib_arr end end before :each do @lib = Library.new "books.yml" end describe "#new" do context "with no parameters" do it "has no book" do lib = Library.new expect(lib).to have(0).books end end context "with a yaml file name parameters" do it "has two books" do expect(@lib).to_have(0).books end end end it "returns all the books in a given category" do expect(@lib.get_books_in_category(:development).length).to eql 1 end it "accepts new books" do @lib.add_book(Book.new("Designing for the Web", "Mark Boulton", :design)) expect(@lib.get_book("Designing for the Web")).to be_an_instance_of Book end it "saves the library" do books = @lib.books.map { |book| book.title} @lib.save lib2 = Library.new 'books.yml' books2 = lib2.books.map { |book| book.title } expect(books).to eql books2 end end 

我得到的是未定义的。 我发现这是我的台词

 expect(@lib).to have(0).books expect(lib).to have(0).books 

我的语法过时了吗? 我用谷歌搜索,我找不到它。

从RSpec 3中删除了have_at_least / have_exactlyhave_at_leasthave_at_most匹配器。它们现在位于单独的rspec-collection_matchers gem中。

或者,正如zishe所说,不是安装gem,你可以使用eq而不是have_exactly / have_exactly ,并且be >=而不是have_at_least并且be <=而不是have_at_most

资料来源: http : //myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3