0

I am following Rspec testing tutorial on Net.Tutsplus.com. I've found problem I couldn't solve. Here the thing.

When I run test:

C:\projekt>rspec spec/library_spec.rb --format nested

I get:

C:/projekt/spec/library_spec.rb:35:in `block (3 levels) in <top (required)>': un
defined method `books' for nil:NilClass (NoMethodError)

library_spec.rb looks like that:

require "spec_helper"

    describe "Library Object" do

    before :all do
        lib_arr = [ 
        Book.new("JavaScript: The Good Parts", "Douglas Crockford", :development),
        Book.new("Designing with Web Standarts", "Jeffrey Zeldman", :design),
        Book.new("Don't Make me Think", "Steve Krug", :usability),
        Book.new("JavaScript Patterns", "Stoyan Sefanov", :development),
        Book.new("Responsive Web Design", "Ethan Marcotte", :design)
    ]

    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 books" do
            lib = Library.new
            lib.books.length.should == 0
        end
end

    context "with a yaml file name parameters " do
        it "has five books"
        @lib.books.length.should == 5
    end
end
 end

Due to tutorial instructions I changed library.rb to:

require 'yaml'

 class Library
attr_accessor :books

def initalize lib_file = false
    @lib_file = lib_file
    @books = @lib_file ? YAML::load(File.read(@lib_file)) : []
    end
 end

According to tutorial it should solve "books-NoMethodError" problem but it still apper. Where is the problem?

Thanks for help!

1 Answer 1

1

undefined method books for nil:NilClass (NoMethodError) just means that you are calling a method books on something that is nil, in this case @lib.

You need to place the before(:each) hook that defines @lib inside a context or describe block, in your code it is not available in the describe '#new' block.

Also, you were missing a do after defining the it "has five books" spec.

I've corrected these errors below:

describe "#new" do
  before :each do
    @lib = Library.new "books.yml"
  end

  context "with no parameters" do
    it "has no books" do
      lib = Library.new
      lib.books.length.should == 0
    end
  end

  context "with a yaml file name parameters " do
    it "has five books" do
      @lib.books.length.should == 5
    end
  end
end
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.