首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在rspec中测试puts

如何在rspec中测试puts
EN

Stack Overflow用户
提问于 2013-07-18 04:11:38
回答 4查看 22.8K关注 0票数 34

我想要做的是在命令行上运行ruby sayhello.rb,然后接收Hello from Rspec

我得到了这一点:

代码语言:javascript
复制
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文件中有这个

代码语言:javascript
复制
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中实际看到测试应该是什么样子。

EN

回答 4

Stack Overflow用户

发布于 2016-07-14 23:03:10

我认为最好的方法是在输出匹配器https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/output-matcher中使用rspec build

举个例子,这是你的类

代码语言:javascript
复制
class MakeIt
  def awesome(text)
    puts "Awesome #{text}"
  end
end

你的测试呢?

代码语言:javascript
复制
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

很好,干净并且遵守规则!

票数 30
EN

Stack Overflow用户

发布于 2015-05-20 15:24:15

根据之前的回答/评论,使用新语法的解决方案将不带gem,如下所示:

代码语言:javascript
复制
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
票数 16
EN

Stack Overflow用户

发布于 2013-07-18 04:27:03

在进入测试块之前,您正在执行代码,因此没有满足预期。在设置期望之后(例如,通过将require_relative语句移到STDOUT....语句之后),您需要在测试块中运行代码,如下所示:

代码语言:javascript
复制
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
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17709317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档