我想要做的是在命令行上运行ruby sayhello.rb
,然后接收Hello from Rspec
。
我得到了这一点:
class Hello
def speak
puts 'Hello from RSpec'
end
end
hi = Hello.new #brings my object into existence
hi.speak
现在,我想用rspec编写一个测试,以检查命令行输出实际上是"Hello from Unix“而不是"I like RSpec”
不起作用。我目前在我的sayhello_spec.rb文件中有这个
require_relative 'sayhello.rb' #points to file so I can 'see' it
describe "sayhello.rb" do
it "should say 'Hello from Rspec' when ran" do
STDOUT.should_receive(:puts).with('Hello from RSpec')
end
end
另外,我需要在我的RSPEC中实际看到测试应该是什么样子。
发布于 2016-07-14 23:03:10
我认为最好的方法是在输出匹配器https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/output-matcher中使用rspec build
举个例子,这是你的类
class MakeIt
def awesome(text)
puts "Awesome #{text}"
end
end
你的测试呢?
describe MakeIt do
describe '#awesome' do
it 'prints awesome things' do
expect do
MakeIt.new.awesome('tests')
end.to output('Awesome tests').to_stdout
end
it 'does not print not awesome things' do
expect do
MakeIt.new.awesome('tests')
end.to_not output('Not awesome tests').to_stdout
end
end
end
很好,干净并且遵守规则!
发布于 2015-05-20 15:24:15
根据之前的回答/评论,使用新语法的解决方案将不带gem,如下所示:
describe "sayhello.rb" do
it "should say 'Hello from Rspec' when run" do
expect(STDOUT).to receive(:puts).with('Hello from RSpec')
require_relative 'sayhello.rb' # load/run the file
end
end
发布于 2013-07-18 04:27:03
在进入测试块之前,您正在执行代码,因此没有满足预期。在设置期望之后(例如,通过将require_relative
语句移到STDOUT....
语句之后),您需要在测试块中运行代码,如下所示:
describe "sayhello.rb" do
it "should say 'Hello from Rspec' when ran" do
STDOUT.should_receive(:puts).with('Hello from RSpec')
require_relative 'sayhello.rb' #load/run the file
end
end
https://stackoverflow.com/questions/17709317
复制相似问题