describe 'Spec' do
let( :qux ){ double 'qux' }
let( :params ){ :foo, :bar, :baz }
specify 'success' do
qux.use :foo, :bar, :baz
expect( qux ).to have_received( :use ).with params
这会生成语法错误,因为:foo, :bar, :baz
无效Ruby。
这样做的好方法是什么?
答案 0 :(得分:2)
如果你想做类似的事情,把params放在一个数组中并使用splat。此外,既然你在嘲笑qux
,那么你将不得不用use
方法:
RSpec.describe 'Spec' do
let( :qux ){ double 'qux' }
let( :params ){ [:foo, :bar, :baz] }
specify 'success' do
qux.stub(:use)
qux.use :foo, :bar, :baz
expect( qux ).to have_received( :use ).with *params
end
end
答案 1 :(得分:1)
let(:var) { .. }
很容易被误解,但实际上非常简单。您正在评估Ruby块,并且从Ruby块返回的任何内容都将分配给:var。
考虑到这一点,您需要从let块返回实际的 Ruby对象。
试试这个:
let(:params) do
[:foo, :bar, :baz]
end
答案 2 :(得分:1)
在Rspec 3.0 or greater中,您必须将其编写为
require 'rspec'
RSpec.describe 'Spec' do
let( :qux ) { double 'qux' }
let( :params ) { [:foo, :bar, :baz] }
it 'success' do
expect(qux).to receive(:use).with(*params)
qux.use(*params)
end
end
当我进行此测试时: -
Arup-iMac:arup_ruby$ rspec spec/test_spec.rb
.
Finished in 0.04997 seconds (files took 0.0904 seconds to load)
1 example, 0 failures