我目前正在做一个 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 不行!
如果没有任何意义,我很乐意澄清其中的任何内容(我知道这篇文章很长)。