用rspec

时间:2016-02-20 10:26:02

标签: ruby-on-rails ruby unit-testing rspec

通过#map(&:to_s)调用考虑以下代码:

arr = [1,2,3]
arr.map(&:to_s)

你可以像这样嘲笑它

expect(arr).to receive(:map) { |arg|
  expect(arg).to receive(:to_s)
}.and_return(["some","values"])

但这不是很方便,我在代码中使用了快捷方式。

  

是否有一个方便的快捷方式(或者是否可以创建一个?)来模拟RSpec中的map(&:to_s)个调用?

1 个答案:

答案 0 :(得分:0)

我不建议在这个级别进行模拟但是如果你真的想要,你可以创建一个像你这样问的快捷方式

# spec/rails_helper.rb
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
RSpec.configure do |config|
  include MockHelper
end

# spec/support/mock_helper.rb
module MockHelper
  def mock_map(array)
    expect(array).to receive(:map).and_return(['some', 'values'])
    array.map(&:to_s)
  end
end

# spec/some_folder/some_spec.rb
describe SomeSpec do
  it 'receives map(&:to_s)' do
    mock_map [1, 2, 3]
  end
end

但是,我认为这会更好

it 'converts array to String Array' do
  expect([1, 2, 3].map(&:to_s)).to eq ['1', '2', '3']
end