【发布时间】:2016-06-23 06:06:15
【问题描述】:
我有几个控制台应用程序,它们使用 readline 进行读取、评估、打印、循环 (REPL),如果可能的话,我想为使用 RSpec 创建测试。我读过关于模拟课程的文章,但我不知道它们是如何工作的。是否只能替换一个真正的输入类来测试其余的类?我想对整个应用程序进行集成测试。对于我的一个 Web 服务,我有一个 rspec 脚本,它使用 curl 发送请求以测试套接字接口。我想为控制台界面做类似的事情。我只是不了解模拟类的概念吗?
回答
根据@Dave Schweisguth 给出的答案,我尝试了这个:
require 'rspec'
require 'pty'
describe "anthematic" do
before(:all) do
@output, @input = PTY.spawn('bin/anthematic')
end
it "turns on a zone" do
@output.readpartial 1024 # read past the prompt
@input.puts "on 1"
expect(@output.readline.chomp).to eq("on 1")
expect(@output.readline.chomp).to eq("turn on zone 1")
end
end
我将 spawn 移出,以便添加其他测试。我是 rspec 新手,所以这可能不是最干净的解决方案。
在研究 PTY 时,我发现 this article 涉及 popen、pty 等子进程。
【问题讨论】:
标签: ruby unit-testing rspec console-application read-eval-print-loop