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