1

我正在尝试编写我所有的 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 仅使用可见文本来选择正确的链接?

4

1 回答 1

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.

于 2013-05-13T02:47:14.343 回答