0

我想隔离特定节点进行测试。

例如,而不是

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。

4

1 回答 1

1

对的,这是可能的。Capybara 没有find_selector,但它确实有find和衍生物,它们采用 alocator并按照您上面暗示的方式表现。见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')
于 2013-07-10T19:15:33.087 回答