Ruby on rails 3 如何单击?将特定行与水豚链接

Ruby on rails 3 如何单击?将特定行与水豚链接,ruby-on-rails-3,ruby-on-rails-3.2,tdd,capybara,Ruby On Rails 3,Ruby On Rails 3.2,Tdd,Capybara,我试图写我所有的水豚代码,不使用任何CSS或有趣的匹配器。出于验收测试的目的,我使用Capybara仅通过用户可见的按钮和链接文本进行导航 因此,我有一个非常简单的测试,它断言管理员可以编辑任何用户: it 'allows an administrator to edit any user' do user = login_admin_user user1 = FactoryGirl.create(:user) click_link "Users" current_path.sh

我试图写我所有的水豚代码,不使用任何CSS或有趣的匹配器。出于验收测试的目的,我使用Capybara仅通过用户可见的按钮和链接文本进行导航

因此,我有一个非常简单的测试,它断言管理员可以编辑任何用户:

it 'allows an administrator to edit any user' do
  user = login_admin_user
  user1 = FactoryGirl.create(:user)
  click_link "Users"
  current_path.should eq(users_path)
  click_link "Edit" # This is the problem
  current_path.should eq(edit_user_path(user1))
  fill_in "Last name", with: "Myxzptlk"
  click_button "Update User"
  page.should have_content("Myxzptlk")
end

当然,上面的问题线不够具体;表中将有2行(user和user1)。我对TDD非常陌生,那么我如何使用水豚来选择只使用可见文本的正确链接呢?

我不知道你为什么要避免使用“CSS或有趣的匹配器”。如果您不想将它们放在测试中,请将它们抽象为助手方法

在我的规范中,我有这样一个助手方法:

module FeatureHelper
  def within_row(text, &block)
    within :xpath, "//table//tr[td[contains(.,\"#{text}\")]]" do
      yield
    end
  end
end
在我的说明书中,我可以这样称呼它:

within_row(user1.name) do
  click_link 'Edit'
end
助手模块进入
spec/support
文件夹,然后通过以下操作加载到我的规范中:

config.include FeatureHelper, type: :feature

在我的
spec\u helper.rb

中,我不知道你为什么要避免使用“CSS或有趣的匹配器”。如果您不想将它们放在测试中,请将它们抽象为助手方法

在我的规范中,我有这样一个助手方法:

module FeatureHelper
  def within_row(text, &block)
    within :xpath, "//table//tr[td[contains(.,\"#{text}\")]]" do
      yield
    end
  end
end
在我的说明书中,我可以这样称呼它:

within_row(user1.name) do
  click_link 'Edit'
end
助手模块进入
spec/support
文件夹,然后通过以下操作加载到我的规范中:

config.include FeatureHelper, type: :feature

在我的
spec\u helper.rb

中,我不明白您为什么不想使用CSS选择器。我一直在使用它们。我不明白你为什么不想使用CSS选择器。我一直在使用它们。您可以在('td',text:text)do中使用
,而不是在:xpath中使用安静的不可读
,“//table//tr[td[contains(,,,,,“{text}\”)]”do
if
Capybara.exact=false
。因此,如果文本和链接位于同一单元格中,您甚至不需要帮助器方法。我的xpath命令将获取该单元格所在的行。哎哟。关于('tr',text:text)中的
?您的解决方案非常有效。我不得不将:feature改为:request,但仅此而已。您可以在('td',text:text)do中使用
,而不是在:xpath中使用安静的不可读
,“//table//tr[td[contains(,,,\“{text}\”)]”do
if
Capybara.exact=false
。因此,如果文本和链接位于同一单元格中,您甚至不需要帮助器方法。我的xpath命令将获取该单元格所在的行。哎哟。关于('tr',text:text)中的
?您的解决方案非常有效。我不得不将:feature改为:request,但仅此而已。