当预期输出与方法相同时,Ruby和RSpec-Test失败
我知道我错过了一些简单的东西。我想写一个测试,检查数组的数组是否已输出。测试不断失败,但测试预期的结果与方法给出的结果相同 连接4.rb当预期输出与方法相同时,Ruby和RSpec-Test失败,ruby,rspec,Ruby,Rspec,我知道我错过了一些简单的东西。我想写一个测试,检查数组的数组是否已输出。测试不断失败,但测试预期的结果与方法给出的结果相同 连接4.rb class Board attr_accessor :board def make_and_print_board grid = Array.new(6) { Array.new(6)} p grid end end 连接4_规格rb require './lib/connect4' RSpec.describe Board
class Board
attr_accessor :board
def make_and_print_board
grid = Array.new(6) { Array.new(6)}
p grid
end
end
连接4_规格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"
我错过了什么?为什么还没有过去?如何才能通过此测试?编写此测试的正确方法是详细说明您的期望。测试你期望ii给出的精确值
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
但是如果您更关心内部构件,您可能希望添加此规范:
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
您正在输出一个数组的字符串表示形式,然后告诉RSpec您希望它输出一个字符串。数组的数组…需要告诉RSpec需要一个字符串(或正则表达式来匹配字符串)