8

私は持っている:

When /^(?:|I )follow "([^"]*)"(?: within "([^"]*)")?$/ do |link, selector|  
  with_scope(selector) do
   click_link(link)
  end
end

私が呼び出すのは:

Background:
  Given I am an existing admin user
  When I follow "CLIENTS"

私のHTMLは次のようなものです:

<a class="active" href="/companies"><h2>CLIENTS</h2></a>

そして、私はこのエラーを受け取り続けます:

.F-.F--U-----U

(::) failed steps (::)

no link with title, id or text 'CLIENTS' found (Capybara::ElementNotFound)
(eval):2:in `click_link'
./features/step_definitions/web_steps.rb:54:in `block (2 levels) in <top (required)>'
./features/step_definitions/web_steps.rb:14:in `with_scope'
./features/step_definitions/web_steps.rb:53:in `/^(?:|I )follow "([^"]*)"(?: within "([^"]*)")?$/'
features/client_add.feature:8:in `When I follow "CLIENTS"'

私はいくつかのことを試しました:

When I follow "<h2>CLIENTS</h2>"

save_and_open_pageブラウザを開いて同じ結果が得られるはずのを試してみました:

Given /^I am an existing admin user$/ do
  role_user = FactoryGirl.create(:role_user)
  admin_user = role_user.user
  sign_in(admin_user)
  save_and_open_page
end

HTML を印刷する方法や、テストが失敗した理由を特定する方法はありますか?

4

4 に答える 4

10

キュウリのステップをデバッグする私のお気に入りの方法は、 への呼び出しをスローすることbinding.pryです。

prygem ファイルに gem が含まれていることを確認してから、エラーをスローする行の直前に呼び出し:development, testを配置し​​ます。binding.pryその後、コマンドを使用して環境をイントロスペクトできるはずlsです。実行中のカピバラ セッションが見つかった場合は (カピバラ セッションが page という名前の変数として格納されている場合) page.htmlpage.text何が表示されているかを確認できます。

それが役立つことを願っています。

于 2012-04-16T15:23:25.143 に答える
2

features/support/debugging.rb の内容として以下を追加すると、失敗したステップのデバッグに役立ちます。

# `LAUNCHY=1 cucumber` to open page on failure
After do |scenario|
  save_and_open_page if scenario.failed? && ENV['LAUNCHY']
end

# `FAST=1 cucumber` to stop on first failure
After do |scenario|
  Cucumber.wants_to_quit = ENV['FAST'] && scenario.failed?
end

# `DEBUG=1 cucumber` to drop into debugger on failure
After do |scenario|
  next unless ENV['DEBUG'] && scenario.failed?
  puts "Debugging scenario: #{scenario.title}"
  if respond_to? :debugger
    debugger
  elsif binding.respond_to? :pry
    binding.pry
  else
    puts "Can't find debugger or pry to debug"
  end 
end

# `STEP=1 cucumber` to pause after each step
AfterStep do |scenario|
  next unless ENV['STEP']
  unless defined?(@counter)
    puts "Stepping through #{scenario.title}"
    @counter = 0
  end
  @counter += 1
  print "At step ##{@counter} of #{scenario.steps.count}. Press Return to"\
        ' execute...'
  STDIN.getc
end

環境変数を設定することで、Cucumber にさまざまなデバッグ ツールを使用させることができ、複数の環境変数を設定することでそれらを組み合わせることができます。

于 2015-06-17T03:52:24.127 に答える
0

ページに移動する (開く) 必要があるため、テストは失敗します。カピバラの組み込みメソッドを使用してそれを行うことができます:

visit path_to(url)

また、標準の Ruby デバッガーを使用してデバッグすることもできます。詳細については、こちらの Rails ガイドを参照してください。

于 2012-04-16T17:31:19.383 に答える
0

私の経験のために:

  • まず、カピバラの「save_and_open_page」メソッドを使用して、そのページに何があるかを確認し、期待どおりの正しいページにレンダリングされるかどうかを検討して確認する必要があります。(ページに「CLIENTS」リンクが表示されていないと思います)
  • 2番目:「CLIENTS」リンクを持つページにリダイレクトするルートパスを変更します

それがあなたを助けることを願っています。

p/s: 私の指示に従ってもうまくいかない場合。機能とステップの定義を教えてください。できる限りのお手伝いをさせていただきます

于 2014-05-20T02:59:08.173 に答える