Ruby on rails 在每个当前迭代的多个示例中重用变量
我有一个变量有点贵。我希望对每个集合重复使用它,如下所示:Ruby on rails 在每个当前迭代的多个示例中重用变量,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我有一个变量有点贵。我希望对每个集合重复使用它,如下所示: describe MyModel, type: :model do describe ".seed" do before(:example) do described_class.seed end %w{field_1 field_2 field_3 field_4}.each do |field| let(:dynamic_field) { described_class.find
describe MyModel, type: :model do
describe ".seed" do
before(:example) do
described_class.seed
end
%w{field_1 field_2 field_3 field_4}.each do |field|
let(:dynamic_field) { described_class.find_by_code('Car').dynamic_fields.values.detect {|item| item['field'].eql?(field) } }
it "contains #{field}" do
expect(dynamic_field).to include( "field" => field )
end
it "contains :field_type" do
expect(dynamic_field).to include "field_type_id"
end
end
end
end
因此,当field==“field_1”
时,应该声明let
,并用于两个示例。当字段_2
是当前迭代时,则应重新声明let
。不幸的是,一旦定义了一次let,它在整个示例中都保持相同的值
我试图在(:example){@dynamic_field=…}之前使用,但这也只是在第一次迭代中声明的
那个么,我应该如何在当前数组迭代的多个示例中重用变量呢?所以let和before(:example)将只分配一次值。从某种意义上说,它们是被记忆的。因此,为了避免编写重复的代码,我创建了一个助手
在rails_helper.rb中:
require 'support/my_helpers'
RSpec.configure do |config|
config.include MyHelpers
end
然后在support/my_helpers.rb中:
module MyHelpers
def get_dynamic_data(type, field)
....
end
end
这并没有被记录下来。因此,对于每个数组迭代,我都能够获得一个新值,同时也不需要编写重复的代码。由于让在示例之间存储值,我建议只使用它来存储集合,并将动态变量本身拉到示例块中
let(:dynamic_fields) do
described_class.find_by_code('Car').dynamic_fields.values
end
%w{field_1 field_2 field_3 field_4}.each do |field|
it "contains #{field} and :field_type", :aggregate_failures do
dynamic_field = dynamic_fields.detect {|item| item['field'].eql?(field) }
expect(dynamic_field).to include( "field" => field )
expect(dynamic_field).to include "field_type_id"
end
end
使用:aggregate_failures
可以对示例进行分组,但仍然可以为每个期望获得单独的失败消息