Ruby 如何在rspec链路匹配器中检查“数据方法”

Ruby 如何在rspec链路匹配器中检查“数据方法”,ruby,rspec,capybara,Ruby,Rspec,Capybara,我有一个RSpec测试,旨在确保网页上存在链接 以下是链接的外观: <a rel="nofollow" data-method="put" href="/change-user">Change user</a> 我想在此测试中添加一个条件,确保链接具有值“put”asdata method属性 如何将此检查添加到测试中?我发现可以将一个块传递到have\u链接匹配器。将使用capybara找到的元素调用此块 在

我有一个RSpec测试,旨在确保网页上存在链接

以下是链接的外观:

<a rel="nofollow" data-method="put" href="/change-user">Change user</a>
我想在此测试中添加一个条件,确保链接具有值“put”as
data method
属性


如何将此检查添加到测试中?

我发现可以将一个块传递到
have\u链接
匹配器。将使用capybara找到的元素调用此块

在该块中,可以验证链接中的某些条件:

subject{page}
访问用户路径(用户)
它“显示更改用户链接”do
期望(主题)。有链接(
“更改用户”,
href:change_user_路径(用户)
){| link | link[“数据方法”]==“放置”}
结束
水豚提供定位元素的功能

允许您检查属性:

user\u link=find\u link('Change user',href:Change\u user\u path(user))
期望(用户链接)。匹配选择器(:element,'data method'=>'put)
如果您计划经常这样做,可以扩展以支持
:方法
过滤器

Capybara::Selector[:link]。实例\u eval do
表达式_过滤器(:方法)do |表达式,值|
生成器(表达式)。添加属性条件(“数据方法”:值)
结束
描述|表达式|过滤器做|**选项|
如果(方法=选项[:方法])
“使用方法#{method.inspect}”
结束
结束
结束
然后将其用作:

应该有_链接('Change user',href:Change_user_path(user),method::put)

过滤器块应该返回一个布尔值,而不是另一个期望值,因此您可能希望像
{| link | link[“data method”]==“put”}
这样的东西作为您的过滤器块非常好,谢谢。它使测试更短。我将使用此更改更新我的响应。