4

私は最初のカピバラテストを始めようとしています。私はRyanBateの哲学に従い、コントローラーの仕様ファイルにいくつかの機能テストを入れています。

describe UsersController do
  render_views

  it "can get the home page" do
    get 'home'
    response.body.should include("Login")
  end

  it "should log in" do
    get 'home'
    puts response.body
    click_link('Login')
    response.body.should include("Email")
    response.body.should include("Password")
  end

end

ログインする必要があるので、問題が発生したので、リンクを見つけてクリックできることを確認することから始めました。運がない。上記のテストでは、リンクが存在することを確認しようとしています

puts response.body次の出力を生成します

...
  <div id="user_nav">
      <a href="/users/sign_up">Register</a> or <a href="/users/sign_in" id="Login">Login</a>
  </div>
...

また、実際のページに要素が表示されます。私のテストだけがそれを見つけることができないようです。最初のテストは合格です。

 1) UsersController should log in
     Failure/Error: click_link('Login')
     Capybara::ElementNotFound:
       no link with title, id or text 'Login' found
     # (eval):2:in `click_link'
     # ./spec/controllers/users_controller_spec.rb:14:in `block (2 levels) in <top (required)>'

Rails 3.2、Rpsec 2.11、Capybara1.1.2を使用しています。

(stackoverflowに関する他の質問と、いくつかのチュートリアルとスクリーンキャストをすでに確認しました。idタグが指定された要素が見つからない理由はわかりませんが、おそらく明らかな何かが欠けています。

4

1 に答える 1

9

getそれが機能しない理由は、本質的に統合テストであるものに使用しているためだと思います。この投稿を参照してください:http://blog.plataformatec.com.br/2012/06/improving-the-integration-between-capybara-and-rspec/

私の理解が正しければ、ページvisitで使用するために使用する必要がありclick_linkます:

it "should log in" do
  visit home_path
  click_link('Login')
  page.should ...
end

SOに関するこの回答も参照してください:current_pathオブジェクトに関して、Rspecとcapybara、visitメソッドとgetメソッドの違い

于 2012-08-29T02:00:08.380 に答える