Ruby on rails Rspec链接到-包括确认/数据确认属性导致测试失败

Ruby on rails Rspec链接到-包括确认/数据确认属性导致测试失败,ruby-on-rails,rspec2,ruby-1.8.7,Ruby On Rails,Rspec2,Ruby 1.8.7,我有一个链接,我正在尝试测试(请忽略方括号): [%=链接到“删除用户”,销毁用户帐户路径(@profile.User), :class=>“delete”,:confirm=>“a”,:title=>“delete{@profile.user.name}”,:method=>:delete%] 下面的测试失败,但如果我注释掉:confirm=>“a”行,它将通过: 看我的失败:( 失败/错误:response.should_选择器(“a”, 预期以下输出包含标记: 这一行的实际html输出如

我有一个链接,我正在尝试测试(请忽略方括号):

[%=链接到“删除用户”,销毁用户帐户路径(@profile.User), :class=>“delete”,:confirm=>“a”,:title=>“delete{@profile.user.name}”,:method=>:delete%]

下面的测试失败,但如果我注释掉:confirm=>“a”行,它将通过:

看我的失败:(

失败/错误:response.should_选择器(“a”,
预期以下输出包含标记:
这一行的实际html输出如下(同样,方括号是我的)。我注意到它的输出“data confirm”作为一个属性在这里,而不是测试所期望的“confirm”

[a href=“/destroy user account/159”class=“delete”data confirm=“a” 数据方法=“删除”rel=“nofollow”title=“删除” Hartl“]删除用户[/a]

有谁能解释一下在这种情况下确认和数据确认之间的区别,并帮助我找出为什么会出现这个错误/如何修复它

谢谢!

“确认”不是一个HTML属性。
data which
标记是HTML5的一项功能,它允许您在元素上放置您想要的任何自定义属性,主要用于在客户端与Javascript之间传递信息

所以:
不是有效的HTML,但是

Rails UJS查找
数据确认
标记,并知道如果您单击它们,会提示您确认消息。它从
数据确认
值获取确认消息

因此,在这种情况下,您的代码应为:

response.should have_selector("a",
                              :href => destroy_user_account_path(@profile.user),
                              'data-confirm' => "a",
                              :title => "Delete #{@profile.user.name}",
                              :class => "delete", 
                              :content => "Delete User")
这将解决您的问题,如果没有,请告诉我。

“确认”选项只是链接所提供的“数据确认”的别名

link_to anything, :confirm => "Message" # is equivalent to
link_to anything, 'data-confirm' => "Message"
但您使用的匹配器不知道别名,因此您需要在此处使用“数据确认”:


谢谢Andrew。那么确认选项是什么?有什么不同吗?例如PS:现在测试都通过了。但只是试着理解一下。没有“确认”选项,“数据确认”是确认选项。如果你将“确认”传递给rspec,它将查找无效的标签。
response.should have_selector("a",
                              :href => destroy_user_account_path(@profile.user),
                              'data-confirm' => "a",
                              :title => "Delete #{@profile.user.name}",
                              :class => "delete", 
                              :content => "Delete User")
link_to anything, :confirm => "Message" # is equivalent to
link_to anything, 'data-confirm' => "Message"
response.should have_selector("a",
                              :href => destroy_user_account_path(@profile.user),
                              'data-confirm' => "a",
                              :title => "Delete #{@profile.user.name}",
                              :class => "delete", 
                              :content => "Delete User")