简体   繁体   English

使用rspec通过ruby&block

[英]Pass a ruby &block using rspec

I want to test the functionality of the method using rspec that receives anonymous block and not raise error. 我想使用接收匿名块而不引发错误的rspec测试该方法的功能。 Below is my code: 下面是我的代码:

class SP
  def speak(options={},&block)
    puts "speak called" 
    block.call()
  rescue StandardError => e
    puts e.inspect()
  end  
end


describe SP do
  it "testing speak functionality not to raise error" do
    sp = SP.new
    sp_mock = double(sp)
    expect(sp_mock).to receive(:speak).with(sp.speak{raise StandardError}).not_to raise_error
  end  
end 

It is below throwing error 低于抛出错误

SP testing speak functionality not to raise error

 Failure/Error: expect(sp).to receive(:speak).with(sp.speak{raise StandardError})

   (#<SP:0x007fead2081d20>).speak(nil)
       expected: 1 time with arguments: (nil)
       received: 0 times
 # ./test.rb:22:in `block (2 levels) in <top (required)>'

Spent a lot of time browsing articles of ruby blocks and ruby documentation but can't figure out. 花了很多时间浏览ruby块和ruby文档的文章,但找不到。

It's too complicated for no reason. 没有理由,它太复杂了。 Did you mean this? 你是这个意思吗

it "testing speak functionality not to raise error" do
  sp = SP.new
  expect {
    sp.speak {raise StandardError}
  }.to_not raise_error
end  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM