2013-09-30 3 views
0

rspec을 사용하여 테스트를 실행하는 데 문제가 있습니다. 내 book.rb 파일에서 코드 블록은 책 제목의 단어를 대문자로 사용하기 위해 제공된 모든 테스트를 통과시킵니다 ("mockingbird를 죽일", "inferno"). 나는 반복해서 내가 PARAMS을 변경하고 제목 방법을 제거하지만 아무것도 작동하지 않습니다 시도했습니다Rspec 테스트, ArgumentError : 잘못된 인수 수 (0에 대해 1)

"Failure/Error: @book.title.should == "Inferno" 
    ArgumentError: 
     wrong number of arguments (0 for 1)". 

오류 메시지를 받고 있습니다 터미널에서 레이크를 실행할 때, 난 여전히 오류 메시지에도 불구하고 프로그램는 대문자로 제목이 있어야합니다. 고마워, 어떤 도움을 주셔서 감사합니다!

class Book 
    attr_accessor :title, :littlewords 

    def initialize 
    @littlewords = ["the", "a", "an", "and", "of", "in"] 
    end 

    def title 
    @title 
    end 

    def title(lit) 
    @title = '' 
    books = lit.split 
    books.each do |title| 
     title.capitalize! unless (littlewords.to_s).include?(title) 
    end 

    books[0] = books[0].upcase 
    books.first.capitalize! 
    books.join(' ') 
    end 
end 

s = Book.new 
puts s.title("to kill a mockingbird") 
puts s.title("inferno") 
+0

문제는 매개 변수를 취하는 두 번째'title' 메서드가 첫 번째'title' 메서드를 덮어 쓰는 것입니다. 나는 당신이'def title = (lit)'를 원한다고 생각하고's.title = "을 사용하여 mockingbird를 죽이게한다"'또한'attr_accessor'로 설정했기 때문에 첫 번째'title'은 필요하지 않습니다. –

답변

0

다른 언어로도 이름이 같지만 다른 매개 변수를 사용할 수 있습니다. 이 두 언어는 실제로 두 가지 다른 방법입니다.

루비는 그렇게하지 않습니다.

두 번째 방법을 정의하면 title, 실제로는 첫 번째 방법 인 title을 쓰고 있습니다. 따라서 하나의 인수를 취하고 하나의 인수를 취하지 않는 두 가지 메소드 대신에 인수를 취하는 하나의 메소드가 있습니다.

따라서 @book.title.should을 호출하면 인수가 필요한 두 번째 메서드가 호출됩니다.

처음에는 attr_accessor으로 설정 했으므로 첫 번째 방법은 title 일 필요는 없습니다. 당신은 그 방법을 무료로 얻습니다.

attr_accessor :title 

당신이 얻을 :

def title 
    @title 
end 

def title=(value) 
    @title = value 
end 

그래서, 당신이하고 싶은 그 두 번째 방법을 덮어 당신이 사용 그래서

.

attr_reader :title 

def title=(lit) 
    books = lit.split 
    books.each do |title| 
    title.capitalize! unless (littlewords.to_s).include?(title) 
    end 

    books[0] = books[0].upcase 
    books.first.capitalize! 
    @title = books.join(' ') 
end 

그래서 당신은 같은 제목을 설정할 수 있습니다

s = Book.new 
puts s.title = "to kill a mockingbird" #=> "To Kill a Mockingbird" 
puts s.title = "inferno" #=> "Inferno" 

이것은 또한 예상대로 작동하도록 테스트 @book.title.should 수있게된다.

관련 문제