我目前正在做一个 rspec 教程并且在阅读测试时遇到了困难。我正在尝试阅读的当前测试是:
describe Book do
before do
@book = Book.new
end
describe 'title' do
it 'should capitalize the first letter' do
@book.title = "inferno"
@book.title.should == "Inferno"
end
我可以理解它要求我做什么:创建一个类 Book 和一个在该类中大写的方法。但是我对如何编写代码的想法是完全错误的(我已经看到了在这种情况下有效的代码示例)
我试图做的事情:
class Book
def initialize(book)
@book = book
end
def title(@book)
@book.capitalize
end
end
最终工作的解决方案:
class Book
attr_reader :title
def initialize(title=nil)
@title = title && title.capitalize!
end
def title=(new_title)
@title = new_title && new_title.capitalize!
end
end
我不明白 @ 到底是做什么的。我认为这是创建一个适用于整个班级的变量。另外,我想知道为什么使用@title 而不是@book(在rspec 测试中指定)。
此外,我正在努力解决代码的“之前”部分以及为什么它要求 @book = Book.new
&& 的部分也令人困惑。为什么只放@title = title.capitalize 不行!
如果没有任何意义,我很乐意澄清其中的任何内容(我知道这篇文章很长)。