ruby
  • rspec
  • 2013-08-27 37 views 0 likes 
    0

    我想寫一個方法,基於RSpec測試規範,返回一對有效的HTML標籤。這是RSpec的:我的Ruby方法有什麼問題?它應該返回HTML標記

    describe "link_to" do 
        it "should return a valid link for Yahoo" do 
        link_to("Yahoo", "http://www.yahoo.com").should eq("<a href='http://www.yaho.com'>Yahoo</a>") 
    end 
        it "should return a valid link for Google" do 
        link_to("Google", "http://www.google.com").should eq("<a href='http://www.google.com'>Google</a>") 
        end 
    end 
    

    這是我想出:

    def link_to(address1, address2, text1, text2) 
        "<a href=#{address1}>#{text1}</a>" 
        "<a href=#{address2}>#{text2}</a>" 
    end 
    
    p link_to("http://www.yahoo.com", "'http://www.google.com'", "Yahoo", "Google") 
    

    而且我得到這個錯誤:

    ArgumentError

    wrong number of arguments (2 for 4)

    +1

    什麼點你覆蓋現有的幫助'link_to'?原來的可以返回相同的並且更好。 –

    +3

    @BillyChan,Ruby沒有現有的'link_to'方法。 – Mischa

    +1

    @BillyChan誰說他在使用Rails? – Ajedi32

    回答

    2

    在你調用link_to的RSpec的與2個參數,而它需要4.

    link_to("Google", "http://www.google.com") 
          ^1    ^2    ^3?, ^4? 
    
    3

    錯誤是明確的,您定義的方法有4個參數

    link_to(address1, address2, text1, text2) 
    

    但隨着2叫它:

    link_to("Yahoo", "http://www.yahoo.com") 
    
    +0

    這是有道理的。謝謝 –

    0

    根據此規範,link_to方法需要兩個參數:

    link_to("Yahoo", "http://www.yahoo.com") # <- 2 arguments 
    

    第一個參數是鏈接文本("Yahoo"),第二個參數是地址("http://www.yahoo.com")。

    你的方法,目前採用4個參數(這就是爲什麼你得到一個ArgumentError):

    def link_to(address1, address2, text1, text2) 
        # ... 
    end 
    

    相反,你的方法簽名應該是這樣的(注意參數順序,鏈接文本至上):

    def link_to(text, address) 
        # ... 
    end 
    

    固定在此之後,你的天賦失敗:

    expected: "<a href='http://www.yaho.com'>Yahoo</a>" 
        got: nil 
    

    沒有更多ArgumentError,那太棒了。讓我們添加您的實現(只是一條線,因爲它不應該立刻返回2號線):

    def link_to(text, address) 
        "<a href=#{address}>#{text}</a>" 
    end 
    

    仍然失敗,但我認爲你可以整理出來:-)

    expected: "<a href='http://www.yaho.com'>Yahoo</a>" 
        got: "<a href=http://www.yahoo.com>Yahoo</a>" 
    
    相關問題