如何使用Capybara click_link特定行

时间:2013-05-13 02:40:21

标签: ruby-on-rails-3 ruby-on-rails-3.2 tdd capybara

我正在尝试编写所有我的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.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很新,所以如何使用Capybara仅使用可见文本选择正确的链接?

1 个答案:

答案 0 :(得分:1)

我不确定你为什么要避免'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_helper.rb