新手黄瓜挂断了??成功?没有方法错误

CRB*_*USA 4 ruby ruby-on-rails cucumber

所以我在"Pragmatic Cucumber"中的第一个项目,我在步骤定义中得到一个未定义的方法错误.错误来自$?成功?不用说我很困惑.我错过了什么宝石?

这是步骤定义

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
Run Code Online (Sandbox Code Playgroud)

这是错误.

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
Run Code Online (Sandbox Code Playgroud)

那么,这里的问题是什么?我知道.success?是对的,为什么不是$?注册?谢谢!

Jon*_*n M 10

您需要使用反引号而不是引号来运行命令:

@output = 'ruby calc.rb #{@input}'
Run Code Online (Sandbox Code Playgroud)

应该:

@output = `ruby calc.rb #{@input}`
Run Code Online (Sandbox Code Playgroud)

编辑:

刚试过这个 - 你想要非常小心地使用这个结构.$?在Cucumber场景之间不会清除值,因此很容易对先前场景中运行的命令的结果进行断言.您可能希望研究Aruba,它专门针对需要Cucumber执行或断言命令行程序的情况而设计.