0

Net.Tutsplus.com の Rspec テスト チュートリアルに従っています。解決できなかった問題が見つかりました。ここにある。

テストを実行すると:

C:\projekt>rspec spec/library_spec.rb --ネストされたフォーマット

私は得る:

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 は次のようになります。

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

チュートリアルの指示により、library.rb を次のように変更しました。

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

チュートリアルによると、「books-NoMethodError」の問題は解決するはずですが、それでも表示されます。問題はどこだ?

手伝ってくれてありがとう!

4

1 に答える 1

1

undefined method books for nil:NilClass (NoMethodError)booksjust は、nil である何か (この場合は ) に対してメソッドを呼び出していることを意味します@lib

コンテキストまたは記述ブロック内にbefore(:each)定義するフックを配置する必要があります。コードでは、ブロックでは使用できません。@libdescribe '#new'

また、it "has five books"仕様を定義した後に do がありませんでした。

以下のエラーを修正しました。

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
于 2012-09-20T09:32:03.080 に答える