Ruby и RSpe c - тест не пройден, если ожидаемый результат совпадает с методом - PullRequest
1 голос
/ 27 января 2020

Я знаю, что мне здесь не хватает чего-то простого. Я хочу написать тест, который проверяет, был ли выведен массив массивов. Тест продолжает проваливаться, но тест ожидает того же, что и метод.

connect4.rb

class Board
  attr_accessor :board
  def make_and_print_board
    grid = Array.new(6) { Array.new(6)}
    p grid
  end
end

connect4_spe c .rb

require  './lib/connect4'


RSpec.describe Board do
  let (:new_board) {Board.new}
  it "prints board" do
    expect{new_board.make_and_print_board}.to output(
      Array.new(6) { Array.new(6)}
    ).to_stdout
  end
end


Это ошибка ...

 1) Board prints board
     Failure/Error:
           expect{new_board.make_and_print_board}.to output(
             Array.new(6) { Array.new(6)}

           ).to_stdout

       expected block to output [[nil, nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil, nil]] to stdout, but output "[nil, nil, nil, nil, nil, nil]\n[nil, nil, nil, nil, nil, nil]\n[nil, nil, nil, nil, nil, nil]\n[nil, nil, nil, nil, nil, nil]\n[nil, nil, nil, nil, nil, nil]\n[nil, nil, nil, nil, nil, nil]\n"

Что я здесь скучаю? Почему это не проходит? Как я могу пройти этот тест?

1 Ответ

1 голос
/ 27 января 2020

Правильный способ написания этого теста - быть многословным относительно ваших ожиданий. Проверьте точное значение того, что вы ожидаете, чтобы дать. p выведет новую строку, поэтому напишите таким образом.

RSpec.describe Board do
  let (:new_board) {Board.new}
  it 'prints board' do
    p_output = "[[nil, nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil, nil]]\n"

    expect{new_board.make_and_print_board}.to output(p_output).to_stdout
  end
end

Но вы можете добавить эту спецификацию c, если вам больше важны внутренние компоненты:

  it 'it outputs a 6 x 6 2d array' do
    expect( new_board.make_and_print_board ).to match_array Array.new(6) { Array.new(6)} 
  end
...