通过#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)
个调用?
答案 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