Подтвердить что ты не робот

Rspec должен иметь (n).items undefined метод

Я пытаюсь следовать руководству на 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

Я получаю, что have есть undefined. Я понял, что это мои строки

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

Является ли мой синтаксис устаревшим? Я googled, и я не могу его найти.

4b9b3361

Ответ 1

Сокеты have/have_exactly, have_at_least и have_at_most были удалены из RSpec 3. Теперь они находятся в отдельном rspec-collection_matchers драгоценный камень.

Или, как говорит zishe, вместо установки драгоценного камня вы можете просто использовать eq вместо have/have_exactly и be >= вместо have_at_least и be <= вместо have_at_most.

Источник: http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3