嗨!对于以下Ruby方法,如何在不重写方法的情况下使用RSpec测试来模拟用户输入?
def capture_name
puts "What is your name?"
gets.chomp
end
Run Code Online (Sandbox Code Playgroud)
我发现了类似的问题,但这种方法需要使用类创建.RSpec是否支持对不在类中的方法进行存根?
我可以重写方法,所以它有一个变量,默认值为"gets.chomp",如下所示:
def capture_name(user_input = gets.chomp)
puts "What is your name?"
user_input
end
Run Code Online (Sandbox Code Playgroud)
现在我可以写一个像这样的RSpec测试:
describe "Capture name" do
let(:user_input) { "James T. Kirk" }
it "should be 'James T. Kirk'" do
capture_name(user_input).should == "James T. Kirk"
end
end
Run Code Online (Sandbox Code Playgroud)
Vic*_*gin 22
你可以像这样存根标准输入流:
require 'stringio'
def capture_name
$stdin.gets.chomp
end
describe 'capture_name' do
before do
$stdin = StringIO.new("James T. Kirk\n")
end
after do
$stdin = STDIN
end
it "should be 'James T. Kirk'" do
expect(capture_name).to be == 'James T. Kirk'
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5156 次 |
| 最近记录: |