# RSpec Question
classNode< ActiveRecord::Basebelongs_to:language
acts_as_nested_set :scope=>:root_iddeflanguage_nameself.root? ? language.name : parent.language_name
endend
describe Node,"instance"do
fixtures :nodes
before(:each)do
@language= mock_model(Language,:name=>"Japanese")@node=Node.create!(:language=>@language)@section1=Node.create!()@chapter1=Node.create!()end
it "should return it's own language if it is root"do # Passes
@language.should_receive(:name).exactly(:once).and_return("Japanese")@node.language_name.should =="Japanese"end
it "should return it's parent's language if it is a child"do # Fails (message below)
@section1.move_to_child_of(@node)@chapter1.move_to_child_of(@section1)@language.should_receive(:name).exactly(:once).and_return("Japanese")@section1.language_name.should =="Japanese"@language.should_receive(:name).exactly(:once).and_return("Japanese")@chapter1.language_name.should =="Japanese"endend# NoMethodError in 'Node instance should return it's parent's language if it is a child'
# You have a nil object when you didn't expect it!
# The error occurred while evaluating nil.name
# /Users/mikel/working/universal_translator/config/../app/models/node.rb:29:in `language_name'
# /Users/mikel/working/universal_translator/config/../app/models/node.rb:29:in `language_name'
# ./spec/models/node_spec.rb:160:
# script/spec:4:
# On looking, I find that it correctly calls itself up to parent, then tries to get
# "language.name" and gets nil because language no longer is defined? How can I get the
# @language to persist?