0

我正在尝试编写一个基于 RSpec 测试规范的方法,该方法返回几个有效的 HTML 标记。这是 RSpec:

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")

我得到这个错误:

参数错误

参数数量错误(2 代表 4)

4

3 回答 3

3

错误很明显,您使用 4 个参数定义方法

link_to(address1, address2, text1, text2)

但是用 2 调用它:

link_to("Yahoo", "http://www.yahoo.com")
于 2013-08-27T14:58:16.780 回答
2

在 RSpec 中,您link_to使用 2 个参数调用,而它需要 4 个。

link_to("Google", "http://www.google.com")
           ^1               ^2             ^3?,  ^4?
于 2013-08-27T14:57:00.603 回答
0

根据规范,该link_to方法采用 2 个参数:

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>"
于 2013-08-27T15:43:42.530 回答