4

そのため、「Pragmatic Cucumber」の最初のプロジェクトに参加していて、ステップ定義で未定義のメソッドエラーが発生しています。エラーは$?.success?から発生しています。言うまでもなく、私は混乱しています。宝石か何かが足りませんか?

ステップの定義は次のとおりです

Given /^the input "(.*?)"$/ do |input|
  @input = input
end

When /^the calculator is run$/ do
  @output = 'ruby calc.rb #{@input}'
  raise('Command failed!') unless $?.success? #$?.success? is failing. look that up.
end

Then /^the output should be "(.*?)"$/ do |arg1|
  pending # express the regexp above with the code you wish you had
end

これがエラーです。

Feature: Adding

  Scenario: Add two numbers       # features/adding.feature:3
Given the input "2+2"         # features/step_definitions/calculator_steps.rb:1
When the calculator is run    # features/step_definitions/calculator_steps.rb:5
  undefined method `success?' for nil:NilClass (NoMethodError)
  ./features/step_definitions/calculator_steps.rb:7:in `/^the calculator is run$/'
  features/adding.feature:5:in `When the calculator is run'
Then the output should be "4" # features/step_definitions/calculator_steps.rb:10

Failing Scenarios:
cucumber features/adding.feature:3 # Scenario: Add two numbers

1 scenario (1 failed)
3 steps (1 failed, 1 skipped, 1 passed)
0m0.012s

それで、ここでの問題は何ですか?私はその成功を知っていますか?正しいです、なぜ$ではないのですか?登録しますか?ありがとう!

4

2 に答える 2

10

コマンドを実行するには、引用符の代わりにバッククォートを使用する必要があります。

@output = 'ruby calc.rb #{@input}'

する必要があります:

@output = `ruby calc.rb #{@input}`

編集:

これをテストしたばかりです。この構成の使用には非常に注意する必要があります。の値は$?Cucumberシナリオ間でクリアされないため、前のシナリオで実行されたコマンドの結果に対してアサーションを作成するのは簡単です。コマンドラインプログラムに対して実行またはアサートするためにCucumberが必要な状況向けに特別に設計されたArubaを調べることをお勧めします。

于 2012-08-11T18:36:21.750 に答える
1

コードruby calc.rb #{@input}はシェルコマンドです。バッククォートにコマンドを含めることは、シェルコマンドを実行することをRubyに通知する方法の1つです。このリンクは、Rubyでシェルコマンドを実行する他の方法に関する情報を提供します。

Pragmatic Bookshelfフォーラムでのこのディスカッションは、具体的にあなたの質問に答えます。また、トピック自体に関するディスカッションもあります。これは、詳細を知りたい場合に常に役立ちます。キュウリの本について特に質問があり、馬の口から答えを得たい場合は、このフォーラムがおそらく最善の策です。

于 2013-11-21T16:20:45.537 に答える