我想隔离要测试的特定节点。
e.g。而不是
get :show
response.should have_content(@user.name)
能够写出类似
的内容会更具描述性/正确性get :show
profile = response.find_selector("div.user-profile")
profile.should have_content(@user.name)
有可能吗?
更新
在阅读了彼得的答案之后,又进一步了解了这一点,但仍未找到元素。
app\views\users\index.html.erb
中的
<h1>Users</h1>
<div id="test"></div>
spec\controllers\users_controller_spec.rb
中的
require 'spec_helper'
describe UsersController do
render_views
it "should should have header" do
get :index
response.should have_selector("h1", content: "Users")
end
it "should show user profile" do
get :index
node = page.find_by_id("test")
p node
end
end
第一次测试通过,第二次测试给出ElementNotFound
错误。我可能只是做了一些愚蠢的事情,因为这是我第一次参加Rails。
答案 0 :(得分:1)
是的,有可能。 Capybara没有find_selector
,但它确实有find
和衍生物,它们采用locator
并且表现得像你所暗示的那样。见http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Finders
例如,而不是:
page.should have_selector('foo', text: 'bar')
你可以说:
node = page.find('foo')
node.should have_content('bar')