如何在 RSpec 期望中使用带有多个参数的 let?
How to use let with multiple params in RSpec expectation?
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。
执行此操作的好方法是什么?
将参数放在一个数组中,如果你想做类似的事情,可以使用 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
let(:var) { .. }
很容易被误解,但其实很简单。您正在评估一个 Ruby 块,并且从 let Ruby 块中 return 编辑的任何内容都会分配给 :var.
考虑到这一点,您需要 return 来自 let 块的 actual Ruby 对象。
试试这个:
let(:params) do
[:foo, :bar, :baz]
end
在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
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。
执行此操作的好方法是什么?
将参数放在一个数组中,如果你想做类似的事情,可以使用 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
let(:var) { .. }
很容易被误解,但其实很简单。您正在评估一个 Ruby 块,并且从 let Ruby 块中 return 编辑的任何内容都会分配给 :var.
考虑到这一点,您需要 return 来自 let 块的 actual Ruby 对象。
试试这个:
let(:params) do
[:foo, :bar, :baz]
end
在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