簡體   English   中英

Rails rspec錯誤:參數數目錯誤(0表示1)

[英]Rails rspec error: wrong number of arguments (0 for 1)

我是Rails和rspec的新手,目前正在在線學習教程。

在本教程中,我正在運行以下代碼:

def display_board(board)
  puts " #{board[0]} | #{board[1]} | #{board[2]} "
  puts "-----------"
  puts " #{board[3]} | #{board[4]} | #{board[5]} "
  puts "-----------"
  puts " #{board[6]} | #{board[7]} | #{board[8]} "
end

board = [" "," "," "," "," "," "," "," "," "]
display_board(board)

運行測試時,我得到以下輸出:

/lib/display_board.rb
  defines a method display_board
  #display_board method
    represents a cell as a string with 3 spaces (FAILED - 1) 

Failures: 

  1) /lib/display_board.rb #display_board method represents a cell as a string with 3 spaces

     Failure/Error:
       def display_board(board)
         puts " #{board[0]} | #{board[1]} | #{board[2]} "
         puts "-----------"
         puts " #{board[3]} | #{board[4]} | #{board[5]} "
         puts "-----------"
         puts " #{board[6]} | #{board[7]} | #{board[8]} "
       end

     ArgumentError:
       wrong number of arguments (0 for 1)
     # ./lib/display_board.rb:2:in `display_board'
     # ./spec/display_board_spec.rb:10:in `block (4 levels) in <top (required)>' 
     # ./spec/spec_helper.rb:5:in `capture_puts'
     # ./spec/display_board_spec.rb:10:in `block (3 levels) in <top (required)>'

Finished in 0.00296 seconds (files took 0.14604 seconds to load)

2 examples, 1 failure

Failed examples:

rspec ./spec/display_board_spec.rb:9 # /lib/display_board.rb #display_board method represents a cell as a string with 3 spaces

測試用例如下:

it 'represents a cell as a string with 3 spaces' do
  output = capture_puts{ display_board }
  expect(output).to include("   ")
end

規格文件的第10行是“輸出= capture_puts {display_board}”

在spec_helpr.rb中,“ capture_puts”的定義如下:

def capture_puts
  begin
    old_stdout = $stdout
    $stdout = StringIO.new('','w')
    yield
    $stdout.string
  ensure
    $stdout = old_stdout
  end
end

我搜索了錯誤“參數數量錯誤(0表示1)”,但沒有得到任何有用的結果。 請指教,因為我確實是Ruby和Rails的初學者。

您必須將木板傳遞給display_board

board = [" "," "," "," "," "," "," "," "," "]
output = capture_puts{ display_board(board) }
expect(output).to include("   ")

錯誤是由於此行

output = capture_puts{ display_board }

display_board需要一個參數,因此它看起來應該像

output = capture_puts{ display_board(board) }

我還想指出,有一個用於測試stdout的rspec匹配器。

https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/output-matcher

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM