我在Ruby中和類「遊戲」的構造函數中編寫了Mastermind遊戲,我想使用gets.chomp來詢問用戶名稱。相當容易,但是我遇到麻煩的地方是在RSpec中測試這個類時,但我似乎無法正確地存取'gets'和'puts',因爲它們在構造函數中不是常規方法。Rspec - 從構造函數中取出gets.chomp
class Game
def initialize
puts "Please enter your name:"
@player = Player.new(gets.chomp)
end
end
describe Game do
Game.stub(:gets).and_return("Create Code AI")
Game.stub(:puts)
subject(:game) { Game.new }
describe "#new" do
its("player.name") { eql("Create Code AI") }
end
end
class Player
attr_reader :name
def initialize(name)
@name = name
end
end
我也試圖把存根到「之前」和「讓」除其他事項外塊,但似乎沒有任何工作。任何幫助表示讚賞!
雖然這當然是可能的,你應該考慮重構你的代碼。如果你可以初始化一個'Game'並且不會扼殺'gets'和'puts',這會不會容易得多? – Stefan
我認爲這是最好的方式去做,謝謝!下面的答案雖然可能是正確的,但對我所做的事情來說似乎太複雜了。 –