我想将一个示例组作为一个函数。
但是示例组范围中的函数定义会发生这样的错误。
FUNCTION-NAME is not available on an example group (e.g. a `describe` or `context` block).`...
这样的代码。
describe '...' do
def func(*args)
# This example group is nested and contains examples.
describe '...' do
...
end
end
func(*args1)
func(*args2)
end
是否可以避免此错误?或者有其他方法吗?
答案 0 :(得分:0)
看起来您应该使用RSpec的共享示例。从我的另一个答案中解脱出来,下面是一个应该是自我解释的示例,并演示了使用let块传递参数的各种方法。
如果您愿意,顶部的shared_examples块等同于方法,其余的是演示使用该shared_examples块的示例。
require 'rails_helper'
RSpec.describe Array, type: :class do
shared_examples 'an array of hashes' do
it { expect(array).to be_an_instance_of(Array) }
it 'each element should be an instance of Hash' do
array.each { |element| expect(element).to be_an_instance_of(Hash) }
end
end
describe 'with an array of hashes' do
context 'with predefined array' do
let(:hash) { Hash.new(name: 'hash', value: 'value') }
let(:array) { [hash, hash, hash] }
context 'without using shared examples' do
it { expect(array).to be_an_instance_of(Array) }
it 'each element should be an instance of Hash' do
array.each { |element| expect(element).to be_an_instance_of(Hash) }
end
end
context 'using shared examples' do
it_should_behave_like 'an array of hashes'
end
end
context 'when passing array to shared example' do
let(:hash) { Hash.new(name: 'hash', value: 'value') }
let(:myarray) { [hash, hash, hash] }
it_should_behave_like 'an array of hashes' do
let(:array) { myarray }
end
context 'with use of before(:each) block' do
before(:each) do
@myarray = myarray
end
it_should_behave_like 'an array of hashes' do
let(:array) { @myarray }
end
end
end
end
end