2017-03-25 57 views
0

この失敗した私のリクエストのテストの一部:RSpecのテスト、リンクを見つけることができませんでしカピバラやボタン

scenario 'Admin destroys a job posting + gets notified' do 
    parent = create(:parent) 
    create(:assignment, user_id: @user.id, role_id: 1) 
    demand = create(:demand, shift_id: 4) 
    sign_in(@user) 
    visit demands_path 

    click_on 'Destroy' 
    expect(page).to have_content('successfully') 
end 

これはエラーです:

Failure/Error: click_on 'Destroy' 

Capybara::ElementNotFound: 
    Unable to find link or button "Destroy" 

そしてここでは、対応するインデックス図であり、

enter image description here

任意のアイデアなぜ目:アプリで「破壊」のリンクなどテストは失敗ですか?

+0

質問のタイトルを変更してください。それは正確ではありません。 RSpecは、ページ上の要素を見つけることとは何の関係もありません。それはあなたがカピバラと共に使用しているドライバーの責任です。この問題をデバッグするには、 'binding.pry'または' byebug'を使うことができます。また、あなたのページに "Destroy"というテキストとのリンクがあり、リンクが見えることを確認する必要があります。この質問は、http://stackoverflow.com/questions/36975204/rails-rspec-capybaraelementnotfound-unable-to-find-link-or-button – etagwerker

+0

の複製である可能性がありますあなたはjavascriptを使用していますか?もしそうなら、capybaraドライバはjavascriptをサポートしていますか?クリックする前にbyebugを使ってみてください。 – Gaston

+0

'sign_in'はどのように定義されていますか?画像は 'Destroy'と表示されません。 –

答えて

2

実際にはページ上にあると思われるデータはありません。これは、いくつかの理由が考えられます。

  1. あなたのページには、JSを必要とし、あなたはJSが可能なドライバを使用していない - あなたのsign_in方法が/ユーザーに記入合格し、ボタンをクリックするように定義されてhttps://github.com/teamcapybara/capybara#drivers

  2. 見るのではなく、ユーザーが最後にログインを完了したことを確認するコンテンツが必要です。これにより、ログインが完了して実際にログインしないうちに、次の訪問が発生する可能性があります。page.htmlの結果を確認するか、またはクリックする前にpage.save_and_open_screenshotに電話して確認してください。

  3. 「破棄」ボタンは実際の<>要素または<ボタン>要素ではありません。セマンティックマークアップまたはスワップを使用して修正するfind(...).click

  4. あなたはJS対応ドライバを使用していますが、あなたのレコードは実際にアプリケーションには表示されません - これはおそらくこれではないと仮定します。このケースだった場合は、ログインが失敗し、あなたはおそらくdatabase_cleanerをインストールし、RSpecの&カピバラで使用するために設定する必要があるだろう - https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example

関連する問題